Expand description
§systemprompt-database
PostgreSQL infrastructure for systemprompt.io: a thin SQLx-backed pool,
generic repository traits, dynamic-query primitives for admin tooling, and
lifecycle helpers (schema installation, extension migrations, validation).
§Public API surface
Database/DbPool— owned pool wrapper with optional split read/write providers.DatabaseProvider— dyn-safe trait abstracting query/execute/transaction primitives across providers (currently onlyPostgreSQL).PostgresProvider— thePostgreSQLimplementation.DatabaseResult— result alias over the workspace’s singlesystemprompt_traits::RepositoryError.MigrationService,install_extension_schemas_full— lifecycle helpers driving extension-supplied DDL.DatabaseAdminService,QueryExecutor,AdminSql,SafeIdentifier— admin/introspection layer used by the CLI.resilience— domain-agnostic resilience primitives (resilience::ResilienceGuard,resilience::CircuitBreaker,resilience::Bulkhead,resilience::retry_async) wrapping outbound calls; the crate’s own connection and transaction retries run on them.
§Feature flags
This crate currently has no Cargo features; everything compiles
unconditionally. The [package.metadata.docs.rs] block is in place so
--all-features documentation builds remain stable as features are added.
§sqlx allowlist
Static SQL goes through the compile-time-verified sqlx::query! /
query_as! / query_scalar! macros. Runtime/dynamic SQL is contained to
two paths whose contract is dynamic SQL by design; the lint-sqlx gate
allows runtime sqlx::query only there:
src/admin/— admin CLI surfaces (introspection, restricted query executor) where the SQL is the user input.src/services/postgres/— the dyn-safeDatabaseProviderimplementation, transaction wrapper, type-erased helpers andPostgreSQLschema introspection.
Every other call site uses verified macros.
Copyright (c) systemprompt.io — Business Source License 1.1. See https://systemprompt.io for licensing details.
Re-exports§
pub use extension::DatabaseExtension;pub use models::ColumnInfo;pub use models::DatabaseInfo;pub use models::DatabaseQuery;pub use models::DatabaseTransaction;pub use models::IndexInfo;pub use models::QueryResult;pub use models::QueryRow;pub use models::QuerySelector;pub use models::TableInfo;pub use services::BoxFuture;pub use services::Database;pub use services::DatabaseCliDisplay;pub use services::DatabaseExt;pub use services::DatabaseProvider;pub use services::DbPool;pub use services::PoolConfig;pub use services::PostgresProvider;pub use services::SqlExecutor;pub use services::with_transaction_retry;pub use error::DatabaseResult;pub use lifecycle::AppliedMigration;pub use lifecycle::BOOTSTRAP_ADVISORY_LOCK_KEY;pub use lifecycle::BaselineStamp;pub use lifecycle::BootstrapLockGuard;pub use lifecycle::ChecksumDrift;pub use lifecycle::DeferredForeignKey;pub use lifecycle::ExpensiveStatement;pub use lifecycle::ExtensionMigrationStatus;pub use lifecycle::FkDeferralError;pub use lifecycle::ForeignKeyDrift;pub use lifecycle::FreshnessCheck;pub use lifecycle::HOT_TABLES;pub use lifecycle::MarkAppliedOutcome;pub use lifecycle::MigrationConfig;pub use lifecycle::MigrationCost;pub use lifecycle::MigrationResult;pub use lifecycle::MigrationService;pub use lifecycle::MigrationStatus;pub use lifecycle::OrphanMigrationLedger;pub use lifecycle::OrphanedMigration;pub use lifecycle::PendingMigration;pub use lifecycle::RepairResult;pub use lifecycle::ReplicaStatus;pub use lifecycle::SchemaCurrency;pub use lifecycle::SchemaInstallReport;pub use lifecycle::SchemaResidue;pub use lifecycle::SlotCollision;pub use lifecycle::SplitCreateTable;pub use lifecycle::TombstonedSlot;pub use lifecycle::UndeclaredTable;pub use lifecycle::audit_migration_cost;pub use lifecycle::audit_one;pub use lifecycle::audit_schema_residue;pub use lifecycle::check_migration_references;pub use lifecycle::check_trigger_routines;pub use lifecycle::install_extension_schemas_full;pub use lifecycle::is_retirement;pub use lifecycle::replica_status;pub use lifecycle::schema_currency;pub use lifecycle::split_create_table_foreign_keys;pub use lifecycle::validate_column_exists;pub use lifecycle::validate_database_connection;pub use lifecycle::validate_table_exists;pub use lifecycle::validate_write_pool_is_primary;pub use repository::CreateServiceInput;pub use repository::INSTANCE_CLAIM_CLASS;pub use repository::InstanceClaim;pub use repository::InstanceClaimError;pub use repository::PgDbPool;pub use repository::ServiceConfig;pub use repository::ServiceRepository;pub use repository::UpsertServiceProcessInput;pub use admin::AdminSql;pub use admin::AdminSqlError;pub use admin::DEFAULT_READONLY_ROW_LIMIT;pub use admin::DatabaseAdminService;pub use admin::IdentifierError;pub use admin::QueryExecutor;pub use admin::QueryExecutorError;pub use admin::SafeIdentifier;
Modules§
- admin
- Admin-only database surface.
- error
- Result alias for the database crate’s public signatures.
- extension
- Extension registration for the database crate’s own schema.
- lifecycle
- Database lifecycle: extension schema installation, migrations, and connection/schema validation.
- models
- Data models exchanged across the database boundary.
- repository
- Repositories owned by the database crate itself.
- resilience
- Composable resilience primitives for outbound calls.
- services
- Service layer: provider abstraction, owned
Databasehandle, transaction helpers, batch execution, and CLI display traits.