github.com/xataio/pgstream
v1.4.1
#1539 most downloaded on Go modules
xataio/pgstream
What this package is like to depend on
Last release 4 days ago
19 Aug 2026
Ships fairly regularly
a new release about every 2 weeks
Rarely documented
notes for 9 of 68 stable releases
Nothing withdrawn
no release was ever pulled
2 years old
117 releases · first in 2024
56 releases in the last 12 months
see the full history below
Release timeline
117 releases · Jul 2024 to Aug 2026Releases
latest 60 of 117-
v1.4.119 Aug 2026Release notes
Open source →⚡ Highlights
🧬 Replicated
byteavalues are no longer corrupted on the way to a Postgres target
🧩 Partitioned tables restore with valid indexes and primary keys, so they keep replicating after a snapshot
🔐 Binaries are built with Go 1.26.6, patching stdlib and module CVEs
Dependency updatesWhat's Changed
Bug fixes
- Decode bytea hex from wal2json before writing to postgres by @siriusfrk in #1090
- Restore
ALTER INDEX ... ATTACH PARTITIONwith indices and constraints by @siriusfrk in #1094
Dependency updates
- Bump Go to 1.26.6 and patch stdlib / module CVEs by @walidelbiir in #1107
- Bump go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc from 1.44.0 to 1.45.0 by @dependabot[bot] in #1097
- Bump go.opentelemetry.io/otel/exporters/prometheus from 0.66.0 to 0.67.0 by @dependabot[bot] in #1099
- Bump testcontainers-go postgres, opensearch and elasticsearch modules from 0.43.0 to 0.44.0 by @dependabot[bot] in #1098, #1100, #1096
- Bump clickhouse/clickhouse-server from 26.7.2.59-alpine to 26.7.3.19-alpine by @dependabot[bot] in #1095
New Contributors
- @siriusfreak made their first contribution in #1090
Full Changelog: v1.4.0...v1.4.1
-
v1.4.012 Aug 2026Release notes
Open source →⚡ Highlights
📊 Native Prometheus scrape endpoint
🎯 Granular object type filtering for pg-to-pg schema snapshots and DDL replication
🛡️ Transformation rules are now validated against unique indexes before a run starts, instead of failing mid-load
🔌 Target connection pool limits are configurable
🪝 Webhook delivery retries transient failures and no longer silently drops still-failing events; adds idempotency headers
🐛 Fixed a DDL parsing bug that silently droppedRENAME COLUMN/DROP COLUMNschema changes
🛂 New preflight check forCREATEROLEwhen a snapshot restores roles
Dependency updatesWhat's Changed
New features
- Add prometheus endpoint by @pauliyobo in #1008
- Granular object type filtering for pg to pg snapshot and streaming by @tsg in #735
- Add target CREATEROLE preflight check for roles snapshotting by @lghuy05 in #1055
- Make target connection limits configurable by @subotac in #1048
- Add a uniqueness classification to transformers by @kvch in #1082
- Classify the greenmask and neosync transformers for uniqueness by @kvch in #1084, #1085
- Validate transformation rules against unique indexes by @kvch in #1086
Bug fixes
- Reject masking configurations that mask no characters by @kvch in #1083
- Fix retry idempotency for webhook target by @kvch in #1080
- Stop the statement terminator being captured as part of a column name by @kvch in #1078
Documentation
- Document transformer uniqueness and the unique index check by @kvch in #1088
- Document the destructive
--resetsnapshot behaviour by @kvch in #1059
Dependency updates
- Bump actions/attest from 4.2.0 to 4.2.2 by @dependabot[bot] in #1065
- Bump go.opentelemetry.io/otel/sdk/metric from 1.44.0 to 1.45.0 by @dependabot[bot] in #1064
- Bump github.com/pgvector/pgvector-go/pgx from 0.4.0 to 0.4.1 by @dependabot[bot] in #1066
- Bump docker/login-action from 4.5.2 to 4.6.0 by @dependabot[bot] in #1061
- Bump clickhouse/clickhouse-server, opensearch and opensearch-dashboards build images by @dependabot[bot] in #1060, #1062, #1063
Details
Prometheus scrape endpoint
The setting
instrumentation.metrics.prometheus.enabledexposes a/metricsendpoint on the existing health server. Metrics can now be scraped directly, with no collector in between:instrumentation: metrics: prometheus: enabled: true # Defaults to false endpoint: "/metrics" # Defaults to /metrics
The endpoint returns
404when disabled.Object type filtering
Both the schema snapshot and DDL replication for pg-to-pg pipelines can now be restricted to a subset of object categories (
tables,sequences,types,indexes,functions,views,triggers, etc.) viainclude_object_types(allowlist) orexclude_object_types(denylist), independently for snapshot and replication. A DDL statement that touches several object types (e.g.CREATE TABLEwith a primary key) is only skipped when every object it touches is excluded.Transformation rules are validated against unique indexes.
Anonymization is lossy by design:
maskingwithtype: idkeeps a 6-character prefix, so every value sharing that prefix collapses to the same masked value. Applied to a column covered by a unique index, this previously surfaced asduplicate key value violates unique constrainthours into a data load. Every transformer is now classified aspreserved(distinct inputs stay distinct),not_guaranteed(random or hashed output, collisions possible) orlossy(collides by construction).validate rulesand pipeline startup now readpg_indexfor the tables in scope and check the configured rules against unique indexes, primary keys and unique constraints. With a Postgres target, alossytransformer on a covered column fails at parse time withtransformation rules break a unique index; with other targets (Kafka, Elasticsearch/OpenSearch, webhooks) the same finding is a warning, since there is no unique index to violate. Anot_guaranteedtransformer always warns. Setallow_uniqueness_loss: trueon a column rule to keep a lossy transformer anyway. Acustommask configured to mask zero characters (mask_beginequal tomask_end, orunmask_begin: 0) is now rejected at construction rather than silently passing values through unmasked. Usenoopto pass a column through on purpose.Configure target side connection count
target.postgres.max_connections(PGSTREAM_POSTGRES_WRITER_MAX_CONNECTIONS) now controls the writer pool size, defaulting to 50 and honoringpool_max_connsfrom the target URL when set explicitly. Previously this setting also sized the schema observer's pool, so a target capped at 90 connections to stay under a 100-connection server limit could still open up to 180. The schema observer is now sized separately, atmin(writer pool, 16). So the process now opens at most the configured writer limit plus 16.Webhook delivery
A failed webhook POST is now retried with configurable backoff (network errors,
429,5xx); other non-2xx responses are treated as permanent and not retried. A delivery that is still failing after retries is logged and dropped so one broken subscriber can't block delivery to everyone else, and at-least-once semantics apply on restart. NewX-Pgstream-LSN/Idempotency-Keyheaders let subscribers dedupe redelivered events (omitted for snapshot events, which share a zero LSN).DISABLE_RETRIESnow actually disables retries.New Contributors
- @pauliyobo made their first contribution in #1008
- @subotac made their first contribution in #1048
Full Changelog: v1.3.1...v1.4.0
-
v1.3.104 Aug 2026Release notes
Open source →⚡ Highlights
📌 Data snapshots read the columns the schema snapshot captured, so a column added to the source mid-snapshot no longer breaks the load
⚠️ Schema drift during a snapshot is now reported: a warning when it happens during the dump, an error when a table's captured columns are gone
🛂 New preflight check forCREATEDBon the target when the snapshot creates the target database
🔐 Documented how DDL replication can carry privileges from a less trusted source to the target
Dependency updatesWhat's Changed
New features
Bug fixes
- Pin the data snapshot to the columns the schema snapshot saw by @kvch in #1058
- Add catalog helpers for reading a table's column list by @kvch in #1057
Documentation
- Document potential privileges escalation between source and target via DDL replication by @tsg in #1052
Dependency updates
- Bump docker/login-action from 4 to 4.5.2 by @dependabot[bot] in #1054
- Bump actions/attest from 4 to 4.2.0 by @dependabot[bot] in #1053
Full Changelog: v1.3.0...v1.3.1
-
v1.3.030 Jul 2026Release notes
Open source →Changelog
- 474ff1c Added tests and docs for snapshot+stream from a read replica (#1049)
- c06f9bd Fix encoding of empty strings as null bytes (#1051)
What's Changed
- Added tests and docs for snapshot+stream from a read replica by @tsg in #1049
- Fix encoding of empty strings as null bytes by @tsg in #1051
Full Changelog: v1.2.5...v1.3.0
-
v1.2.528 Jul 2026Release notes
Open source →⚡ Highlights
🎲 Template and JSON transformers no longer corrupt their random generator under multi-worker snapshots
📉 New metrics and totals for whatignore_send_errorssilently discards, plus a startup warning when suppression is on
🧾 Snapshot failures are logged as errors instead of rendering as{}
🔁 Snapshot request status updates are retried, and report data loss when they still cannot be persisted
🔍 A failed restore now carries the output that explains it, with credentials redactedWhat's Changed
Bug fixes
- Pool the templates that share greenmask's funcmap state by @kvch in #1045
- Add a counter for batches dropped by ignore_send_errors by @kvch in #1042
- Log snapshot failures as errors instead of rendering them as {} by @kvch in #1039
- Retry snapshot recorder requests, emit errors by @kvch in #1041
- Add more details about failed statements by @kvch in #1040
CI / build
- Catch both outcomes of the enum type creation race in integration tests by @kvch in #1044
- Update golangci-lint in Makefile to match CI version by @kvch in #1046
Upgrade notes
No configuration changes are required.
Contributors.
make lintnow installs golangci-lint v2.10.1 to match CI, which reports findings the previously pinned v2.5.0 did not.Full Changelog: v1.2.4...v1.2.5
-
v1.2.427 Jul 2026Release notes
Open source →⚡ Highlights
🔑 Replicated
DELETEs on tables with a user-defined enum primary key no longer fail
🧬 Enum arrays and domains over enums are now handled in delete identities, not just plain enums
🛟 A failed query can no longer take its whole batch down with it, including writes to unrelated tablesWhat's Changed
Bug fixes
Upgrade notes
No configuration changes are required, and the SQL emitted for tables without enum identity columns is unchanged.
Full Changelog: v1.2.3...v1.2.4
-
v1.2.327 Jul 2026Release notes
Open source →⚡ Highlights
🎨 Bulk ingest no longer fails on tables with user-defined enum columns
🔑 Kafkaprimary_keypartitioning no longer collides distinct rows onto one message key
🩺 Two preflight checks that reported false failures on correctly-configured sources (wal2json, replica identity) are fixed
🔍 Preflight can now run source-only checks (--source) and verifies major PostgreSQL version compatibility
Dependency updatesWhat's Changed
New features
- [Preflight] Option to run only source side checks by @kvch in #1025
- [Preflight] Check major PostgreSQL version by @kvch in #1026
Bug fixes
- Copy user defined enum columns by @kvch in #1035
- Escape keys when using primary key partitioning by @kvch in #1036
- Fix two false-result preflight checks (wal2json, replica_identity) by @kvch in #1034
- Update PostgreSQL version check for source size support by @kvch in #1027
Dependency updates
- Bump actions/github-script from 7 to 9 by @dependabot[bot] in #1030
- Bump actions/download-artifact from 7 to 8 by @dependabot[bot] in #1029
- Bump clickhouse/clickhouse-server from 26.6.1.1193-alpine to 26.7.1.1315-alpine in /build/docker by @dependabot[bot] in #1028
Full Changelog: v1.2.2...v1.2.3
-
v1.2.222 Jul 2026Release notes
Open source →⚡ Highlights
🗜 Configurable session settings for the snapshot index/constraint restore phase (via
PGOPTIONS)
🛡 Index constraint settings validated at startup
🩺 Preflight now warns when a snapshot source looks load-balanced (Aurora/RDS reader, instance-spanning pooler)
💥 Fixed a stack-depth overflow on bulk deletes of tables with composite primary keys
🛑pg_restorenow honors context cancellation, so shutdowns and timeouts no longer hangWhat's Changed
New features
- Add index restore session settings by @jonasHanhan in #990
Bug fixes
- Fix stack-depth overflow on bulk composite PK deletes by @kvch in #1024
- Honor context cancellation in pg_restore by @kvch in #1023
- [Preflight] Detect load-balanced snapshot sources by @kvch in #1015
New Contributors
- @jonasHanhan made their first contribution in #990
Full Changelog: v1.2.1...v1.2.2
-
v1.2.120 Jul 2026Release notes
Open source →⚡ Highlights
📊 Pipeline phase visibility via
/statusand a new OTel gauge
🧬 Preflight checks no longer reports custom enums as unsupported types
🗜 Snapshot request unique index hashestable_names: fixes btree overflow with many tables
🐛 Bug fixes (deferred parsing of validated schema objects, comment restore downgraded to warning)
Dependency updatesWhat's Changed
New features
- Add pipeline phase visibility via
/statusand OTel gauge by @Shaurya2k06 in #1000
Bug fixes
- Hash
table_namesin snapshot request unique index to avoid btree overflow by @kvch in #1013 - Do not report custom enums as unsupported types by @kvch in #1005
- Defer parsing of validated schema objects by @tsg in #1003
- Downgrade error on restoring comment to warning by @kvch in #1009
Dependency updates
- Bump actions/setup-go from 6 to 7 by @dependabot[bot] in #1007
New Contributors
- @Shaurya2k06 made their first contribution in #1000
Full Changelog: v1.2.0...v1.2.1
- Add pipeline phase visibility via
-
v1.2.015 Jul 2026Nothing published for this version
-
v1.1.106 Jul 2026Nothing published for this version
-
v1.1.1-0.20260707143617-80153ed130dc07 Jul 2026 pre-releaseNothing published for this version
-
v1.1.012 Jun 2026Nothing published for this version
-
v1.0.4-0.20260526082755-1ef11df3da5026 May 2026 pre-releaseNothing published for this version
-
v1.0.320 May 2026Nothing published for this version
-
v1.0.208 May 2026Nothing published for this version
-
v1.0.2-0.20260408103448-59a723df5f9808 Apr 2026 pre-releaseNothing published for this version
-
v1.0.2-0.20260311185232-98880956868311 Mar 2026 pre-releaseNothing published for this version
-
v1.0.2-0.20260305142932-cb0d45dba4bf05 Mar 2026 pre-releaseNothing published for this version
-
v1.0.2-0.20260303200948-672cd116775c03 Mar 2026 pre-releaseNothing published for this version
-
v1.0.2-0.20260225134043-1c183646356c25 Feb 2026 pre-releaseNothing published for this version
-
v1.0.113 Feb 2026Nothing published for this version
-
v1.0.004 Feb 2026Nothing published for this version
-
v0.9.1506 Jul 2026Nothing published for this version
-
v0.9.1412 Jun 2026Nothing published for this version
-
v0.9.1320 May 2026Nothing published for this version
-
v0.9.1211 May 2026Nothing published for this version
-
v0.9.1111 Mar 2026Nothing published for this version
-
v0.9.1006 Mar 2026Nothing published for this version
-
v0.9.903 Mar 2026Nothing published for this version
-
v0.9.820 Feb 2026Nothing published for this version
-
v0.9.703 Feb 2026Nothing published for this version
-
v0.9.7-0.20260129130534-deb20dee9ee229 Jan 2026 pre-releaseNothing published for this version
-
v0.9.628 Jan 2026Nothing published for this version
-
v0.9.514 Jan 2026Nothing published for this version
-
v0.9.413 Jan 2026Nothing published for this version
-
v0.9.316 Dec 2025Nothing published for this version
-
v0.9.204 Dec 2025Nothing published for this version
-
v0.9.125 Nov 2025Nothing published for this version
-
v0.9.021 Nov 2025Nothing published for this version
-
v0.8.11-0.20251114163325-aa24679cbc1114 Nov 2025 pre-releaseNothing published for this version
-
v0.8.1013 Nov 2025Nothing published for this version
-
v0.8.911 Nov 2025Nothing published for this version
-
v0.8.9-0.20251107134532-47d726f748e707 Nov 2025 pre-releaseNothing published for this version
-
v0.8.806 Nov 2025Nothing published for this version
-
v0.8.703 Nov 2025Nothing published for this version
-
v0.8.629 Oct 2025Nothing published for this version
-
v0.8.515 Oct 2025Nothing published for this version
-
v0.8.414 Oct 2025Nothing published for this version
-
v0.8.4-0.20250925145400-482b00b9ea0b25 Sep 2025 pre-releaseNothing published for this version
-
v0.8.324 Sep 2025Nothing published for this version
-
v0.8.3-0.20250917150009-97fe27d903de17 Sep 2025 pre-releaseNothing published for this version
-
v0.8.217 Sep 2025Nothing published for this version
-
v0.8.2-0.20250912161113-78399dbc84a912 Sep 2025 pre-releaseNothing published for this version
-
v0.8.110 Sep 2025Nothing published for this version
-
v0.8.005 Sep 2025Nothing published for this version
-
v0.7.10-0.20250829091117-c32c196dfd1c29 Aug 2025 pre-releaseNothing published for this version
-
v0.7.10-0.20250827120811-5a74402c266e27 Aug 2025 pre-releaseNothing published for this version
-
v0.7.10-0.20250826123524-dab28b7b626126 Aug 2025 pre-releaseNothing published for this version
-
v0.7.925 Aug 2025Nothing published for this version