Release Date: February 4th, 2026
This is a major breaking release that fundamentally transforms how pgstream handles DDL (Data Definition Language) replication. Version 1.0.0 introduces a stateless architecture that eliminates the need for schema log tables and provides a more robust, maintainable solution for tracking database schema changes.
- Audience
- Summary of Required Actions
- Breaking Changes
- Migration Guide
- Required Configuration Changes
- Architecture Changes (Background)
- Support
These release notes are primarily intended for:
- Users upgrading from v0.x (action required)
- Operators running pgstream in production
- Developers integrating pgstream replication output
Important: Upgrading from any v0.x version requires re-initialization.
- Existing installations must be re-initialized
- All
schema_log–related configuration must be removed - Injector configuration must be updated (
schemalog_url→source_url) - Snapshot schema mode must be updated
The schema log mechanism has been fully removed.
- The
pgstream.schema_logtable no longer exists - All schema log–based tracking has been removed
- Schema changes are no longer persisted as database state
Existing installations must migrate to the new DDL-based model.
PostgreSQL migrations are now split into two independent groups.
- Location:
migrations/postgres/core/ - Tracking table:
pgstream.schema_migrations_core - Provide:
- DDL replication
- Event triggers
- Core replication infrastructure
- Required for all installations
- Location:
migrations/postgres/injector/ - Tracking table:
pgstream.schema_migrations_injector - Provide:
- ID injection
- Internal table ID tracking (
pgstream.table_ids)
- Only required when using search indexing or ID-dependent features
- All
schema_logconfiguration options have been removed - LSN is now the default and only event version identifier
- The
pkg/schemalogpackage has been removed - Processors now consume DDL events directly
- Snapshot schema generation is based on DDL events instead of schema log entries
These changes affect internal integrations and custom processors.
Simply install pgstream v1.0.0 - no migration needed.
# Option 1: Initialize separately
pgstream init --config config.yaml
# Option 2: Initialize and run in one command
pgstream run --config config.yaml --init
# Option 3: Run only database migrations (without creating replication slot)
pgstream init --config config.yaml --migrations-onlyThe system will automatically install the appropriate migrations based on your configuration.
Note: The --migrations-only flag runs only the database migrations (creating the pgstream schema, tables, functions, and triggers) without creating the replication slot. This is useful when you want to set up the schema separately or when using different database credentials for migrations versus replication.
Upgrading requires re-initialization.
Recommended steps:
-
Stop the running pgstream instance
-
Remove existing state
pgstream destroy --config config.yaml --migrations-only
Using
--migrations-onlypreserves the replication slot and the pgstream schema, along with any non migration tables (e.g.,snapshot_requests) and can reduce downtime. -
Download pgstream v1.0.0
-
Initialize v1.0.0
pgstream init --config config.yaml # Or initialize and run in one command: pgstream run --config config.yaml --init -
Start replication
pgstream run --config config.yaml
Old configuration:
modifiers:
injector:
enabled: true
schemalog_url: "..."New configuration:
modifiers:
injector:
enabled: true
source_url: "..."For PostgreSQL sources, source_url is not required.
PostgreSQL targets no longer require schema_log_store_url.
The schemalog snapshot schema mode has been removed. It will always use pgdump_pgrestore.
Use:
snapshot:
schema:
mode: pgdump_pgrestoreThe following sections describe the new replication model in more detail.
DDL is now captured directly from PostgreSQL using event triggers and logical WAL messages.
High-level flow:
- DDL is captured using PostgreSQL event triggers
- DDL events are enriched with metadata
- DDL events are emitted as logical WAL messages
- Schema changes are streamed inline with data changes
This removes persistent schema state while preserving event ordering.
Schema changes are now represented as first-class WAL events.
This release introduces new Go structs describing DDL events and their associated metadata.
Search indexing no longer depends on the schema log.
- Field aliasing replaces schema-log-based mappings
- Column renames preserve aliases to maintain query compatibility
- Search results use actual table and column names instead of internal IDs
Snapshot processing has been unified for all targets. Instead of having a dedicated schema snapshot for non Postgres targets, now:
- DDL is extracted from
pg_dumpoutput - DDL is converted into WAL-style DDL events
- Snapshot and live events are processed through the same pipeline
Migrations can now be applied selectively:
- Core migrations for standard replication
- Injector migrations only when search or ID tracking is required
This reduces database objects, permissions, and operational overhead.
- Issues: https://github.com/xataio/pgstream/issues
- Documentation: https://github.com/xataio/pgstream/tree/main/docs
- Discussions: https://github.com/xataio/pgstream/discussions