pub struct PostgresTaskStore { /* private fields */ }Expand description
PostgreSQL-backed TaskStore.
Stores tasks as JSONB blobs in a tasks table. Suitable for multi-node
production deployments that need shared persistence and horizontal scaling.
§Schema
The store auto-creates the following table on first use:
CREATE TABLE IF NOT EXISTS tasks (
id TEXT PRIMARY KEY,
context_id TEXT NOT NULL,
state TEXT NOT NULL,
data JSONB NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);list() returns tasks most-recently-updated first (spec §3.1.4), ordered by
(updated_at DESC, id DESC) with a composite row-value cursor. The cursor
carries updated_at as a UTC-normalized microsecond string, so pagination
is stable regardless of the connection’s session time zone.
Implementations§
Source§impl PostgresTaskStore
impl PostgresTaskStore
Sourcepub async fn new(url: &str) -> Result<PostgresTaskStore, Error>
pub async fn new(url: &str) -> Result<PostgresTaskStore, Error>
Opens a PostgreSQL connection pool and initializes the schema.
§Errors
Returns an error if the database cannot be opened or the schema migration fails.
Sourcepub async fn with_migrations(url: &str) -> Result<PostgresTaskStore, Error>
pub async fn with_migrations(url: &str) -> Result<PostgresTaskStore, Error>
Opens a PostgreSQL database with automatic schema migration.
Runs all pending migrations before returning the store. This is the recommended constructor for production deployments because it ensures the schema is always up to date without duplicating DDL statements.
§Errors
Returns an error if the database cannot be opened or any migration fails.
Trait Implementations§
Source§impl Clone for PostgresTaskStore
impl Clone for PostgresTaskStore
Source§fn clone(&self) -> PostgresTaskStore
fn clone(&self) -> PostgresTaskStore
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PostgresTaskStore
impl Debug for PostgresTaskStore
Source§impl TaskStore for PostgresTaskStore
impl TaskStore for PostgresTaskStore
Source§fn save<'a>(
&'a self,
task: &'a Task,
) -> Pin<Box<dyn Future<Output = Result<(), A2aError>> + Send + 'a>>
fn save<'a>( &'a self, task: &'a Task, ) -> Pin<Box<dyn Future<Output = Result<(), A2aError>> + Send + 'a>>
Source§fn get<'a>(
&'a self,
id: &'a TaskId,
) -> Pin<Box<dyn Future<Output = Result<Option<Task>, A2aError>> + Send + 'a>>
fn get<'a>( &'a self, id: &'a TaskId, ) -> Pin<Box<dyn Future<Output = Result<Option<Task>, A2aError>> + Send + 'a>>
None if not found. Read moreSource§fn list<'a>(
&'a self,
params: &'a ListTasksParams,
) -> Pin<Box<dyn Future<Output = Result<TaskListResponse, A2aError>> + Send + 'a>>
fn list<'a>( &'a self, params: &'a ListTasksParams, ) -> Pin<Box<dyn Future<Output = Result<TaskListResponse, A2aError>> + Send + 'a>>
Source§fn insert_if_absent<'a>(
&'a self,
task: &'a Task,
) -> Pin<Box<dyn Future<Output = Result<bool, A2aError>> + Send + 'a>>
fn insert_if_absent<'a>( &'a self, task: &'a Task, ) -> Pin<Box<dyn Future<Output = Result<bool, A2aError>> + Send + 'a>>
Auto Trait Implementations§
impl !RefUnwindSafe for PostgresTaskStore
impl !UnwindSafe for PostgresTaskStore
impl Freeze for PostgresTaskStore
impl Send for PostgresTaskStore
impl Sync for PostgresTaskStore
impl Unpin for PostgresTaskStore
impl UnsafeUnpin for PostgresTaskStore
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
Source§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request