Skip to content
PG Horizon
v6.0.1 · Free to use · Released 9 September 2026

pgpipe PostgreSQL change-data-capture, built for controlled scale — with the operations layer native leaves to you.

pgpipe streams row changes from one PostgreSQL database to another with strict source ordering, crash-safe checkpoints, a built-in dashboard, a dead-letter queue, and evidence-backed backlog health. Built for analytics replicas, disaster recovery, and zero-downtime database moves.

Free to use. No registration, no email wall.

pgpipe vs native LR
# PostgreSQL -> PostgreSQL CDC

┌────────────────────────────────────────────┬────────┬────────┐
│                                            │ pgpipe │ native │
├────────────────────────────────────────────┼────────┼────────┤
│ Guided setup + preflight checks            │   ✓    │   ✕    │
│ Web dashboard + Prometheus metrics         │   ✓    │   ✕    │
│ Dead-letter queue + replay                 │   ✓    │   ✕    │
│ Automatic destination schema setup         │   ✓    │   ✕    │
│ Safe structured DDL replication            │   ✓    │   ✕    │
│ Data masking + transformation              │   ✓    │   ✕    │
│ Verification + targeted repair             │   ✓    │   ✕    │
│ Scheduled verification + repair previews   │   ✓    │   ✕    │
└────────────────────────────────────────────┴────────┴────────┘

→ ordered CDC, plus the operational
  layer native logical replication lacks.
What's in the box

Built for production. Free to use.

Everything PostgreSQL's native logical replication is missing — observability, automatic schema setup, error handling, and a UI — without giving up the ordering guarantees that matter.

Scalable ordered apply

Preserves source transaction order while safe grouped commits amortize destination commit overhead. An opt-in hybrid writer accelerates eligible large groups; direct mode remains the compatibility path.

Automatic schema setup

Introspects the source and creates matching tables and primary keys on first run. Structured DDL safely applies supported creates, renames, additive changes, bounded backfills, and approved destructive changes; unsupported shapes fail closed for review.

Web dashboard & setup wizard

Token-protected guided setup prepares destination safety storage with a temporary administrator credential. The dashboard brings together live tables, lag, verification history, and repair readiness.

Strict, grouped, or parallel

Use singleton strict commits, group ordered source transactions, or apply in parallel for analytics workloads. Choose per pipeline, with direct mode as the compatibility path.

Dead-letter queue

Failed events land in a DLQ with full context — inspect, fix, and replay via REST API. You never silently lose data.

Prometheus & Kubernetes-ready

Prometheus metrics, evidence-backed backlog health, liveness/readiness probes, JWT auth, TLS, and graceful shutdown. Drop into your existing platform.

Architecture

A proper streaming pipeline.

pgpipe decodes the WAL via the pgoutput v2 protocol, snapshots tables in parallel on first run, then streams changes with batching, backpressure, and crash-safe checkpoints.

STEP 1

Source PG

Logical replication slot + publication. PostgreSQL 14+ (15+ for wildcard tables).

STEP 2

Decoder

pgoutput v2 with streaming. Handles long-running transactions.

STEP 3

Pipeline

Batch → backpressure → DLQ on failure. Transaction order preserved.

STEP 4

Applier

Strict-ordered SendBatch pipelining. Sliding-window checkpoint.

STEP 5

Destination PG

Tables and primary keys created for you on first run; schema remapping supported.

Quickstart

Try pgpipe.

Try the isolated Docker demo, or initialize a native installation with the protected setup wizard. v6 requires fresh destination safety storage; repair execution remains disabled by default.

Try it with Docker

bash
BASE="https://www.pghorizon.com/downloads/pgpipe/v6.0.1"
mkdir pgpipe-v6.0.1-demo &&
cd pgpipe-v6.0.1-demo &&
curl -fSL --retry 5 --retry-delay 2 --connect-timeout 20 --max-time 120 -C - -o pgpipe-6.0.1-docker.tar.gz "$BASE/pgpipe-6.0.1-docker.tar.gz" &&
curl -fsSL --retry 5 -o checksums.txt "$BASE/checksums.txt" &&
awk '$2 == "pgpipe-6.0.1-docker.tar.gz"' checksums.txt | shasum -a 256 -c - &&
tar -xzf pgpipe-6.0.1-docker.tar.gz &&
cd docker &&

# Prepare protected storage and start the isolated demo
docker compose up -d --build --wait --wait-timeout 180

# Dashboard username: admin
docker compose exec pgpipe cat /var/lib/pgpipe/data/pgpipe-admin.password

# Open http://localhost:8086 in your browser
docker compose logs -f pgpipe

Initialize a native installation

After installing the package, prepare database permissions and run the wizard. Existing v5 users must review the breaking-upgrade guidance first.

bash
# On a fresh installation, complete initialization first
sudo -u pgpipe -- /usr/bin/pgpipe init -c /etc/pgpipe/pgpipe.yaml

# Open the exact printed URL and paste the separate setup token.
# Complete the wizard, then start the service explicitly.
sudo systemctl start pgpipe
sudo systemctl status pgpipe
sudo journalctl -u pgpipe -f
Who pgpipe is for

Anywhere you need PostgreSQL changes somewhere else.

Analytics replicas

Keep a reporting database in sync without taxing the primary. The destination schema is created for you on first run.

Disaster recovery

Continuously replicated standby in another region or provider, ready for failover.

Zero-downtime moves

Migrate between providers, versions, or clouds with a strict-ordered cutover and verifiable consistency.

Multi-tenant isolation

Replicate to a different schema name on the destination — useful for blue-green and per-tenant warehouses.

Distributed coherence

Stream Postgres changes to keep caches, search indexes, or microservices in sync (sink your own consumer on the WAL).

Compliance archives

Continuous replication into a retention-only, append-friendly destination.

Need a hand?

We built pgpipe — and we run it for clients.

If you'd rather not operate the pipeline yourself, PG Horizon can deploy, monitor, and support pgpipe in your environment as part of our managed services.