Skip to content

Releases: pgrundev/pgsync

Release list

pgsync v0.1.1

pgsync v0.1.1 Pre-release
Pre-release

Choose a tag to compare

@alexshapalov alexshapalov released this 14 Oct 01:05

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.io

Or download a binary below and verify it against checksums.txt.

What's in 0.1.1

  • Consistent bootstrap: slot with exported snapshot, pg_dump schema, streaming COPY,
    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_REQUIRED instead 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 outside replication.tables stop 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.