Repository navigation
Releases: pgrundev/pgsync
Release list
pgsync v0.1.1
Controlled technical beta. Synthetic or explicitly approved non-sensitive data only.
There is no data masking yet; do not point pgsync at production customer data.
pgsync replicates selected tables from PostgreSQL 16, 17 or 18 to another PostgreSQL. It
takes a transactionally consistent snapshot, then streams every committed change through
native pgoutput: one target transaction per source transaction, with the checkpoint
committed inside it. WAL is acknowledged only after the target commit.
Install
brew install pgrundev/tap/pgsync # builds from source, all platforms
cargo install pgsync # from crates.ioOr download a binary below and verify it against checksums.txt.
What's in 0.1.1
- Consistent bootstrap: slot with exported snapshot,
pg_dumpschema, streamingCOPY,
handoff at the slot's consistent point. A failed snapshot drops the slot it created. - CDC for INSERT, UPDATE, DELETE, TRUNCATE with atomic, commit-ordered apply.
- Crash and reconnect safety: redelivered transactions skipped by LSN; continuity checks
(system id, slot state, slot position) on every start;RESYNC_REQUIREDinstead of any
silent skip. - Values that no longer fit the target column stop the job (consistency) instead of being
truncated or rounded; changes for tables outsidereplication.tablesstop the job. - Bounded memory: byte-accounted channel, bounded batches, streamed COPY, message size limit.
- TLS with certificate verification for non-loopback hosts, libpq TLS URL parameters.
check(preflight),bootstrap,run,status(with a runtime heartbeat and JSON),
cleanup; terminal progress mode with a per-transaction stream.
Validation
PostgreSQL 16.11, 17.11 and 18.6: 66 unit tests, live protocol test, 25 end-to-end and 5
disruptive scenarios per version including a 15-round random SIGKILL loop; TLS negative
paths against a TLS-only server. Details: docs/test-report.md, docs/performance.md,
docs/beta-assessment.md.
Known limitations
DDL is not replicated (a column change stops the job and names the column). No masking,
no protocol v2 streaming, no partitioned tables, column lists or row filters. Single
process per job. See docs/features.md and docs/production-readiness-gaps.md.