v5.1.0 · Released 8 August 2026 · See what's new →
Download pgpipe
Single static binary, ~25 MB. No runtime dependencies. Verify the SHA-256 checksum before running, especially on production hosts.
The fastest way to try pgpipe.
A small Dockerfile + docker-compose.yml spin up a source database, a destination database, and pgpipe wired between them. The dashboard opens at http://localhost:8080.
1. Grab the files
# Make a working directory
mkdir pgpipe-demo && cd pgpipe-demo
# Pull the four files
BASE="https://www.pghorizon.com/downloads/pgpipe/v5.1.0/docker"
curl -fsSL $BASE/Dockerfile -O
curl -fsSL $BASE/docker-compose.yml -O
curl -fsSL $BASE/pgpipe.example.yaml -o pgpipe.yaml
curl -fsSL $BASE/init-source.sql -O
curl -fsSL $BASE/init-dest.sql -O 2. Bring the stack up
# Build the pgpipe image (pulls the published binary)
# and start everything in one go
docker compose up -d --build
# Watch pgpipe logs
docker compose logs -f pgpipe
# Open the dashboard
open http://localhost:8080 3. See replication in action
# Insert a row in the source database
docker compose exec source-db psql -U postgres source_db \
-c "INSERT INTO public.greetings(message) VALUES ('hello from pgpipe');"
# A moment later, see it in the destination
docker compose exec dest-db psql -U postgres dest_db \
-c "SELECT * FROM public.greetings;"
# Tear it all down (and delete data)
docker compose down -v Logging into the dashboard
On the very first docker compose up, pgpipe generates a random admin password and prints it once to the logs. Open the dashboard at http://localhost:8080 and use these credentials:
# Just the password (cleanest, always works)
docker compose exec pgpipe cat /var/lib/pgpipe/pgpipe-admin.password
# Or grep the full first-run banner from the logs
docker compose logs pgpipe | grep -A 6 "FIRST RUN — DASHBOARD"
Username is admin. The password is auto-generated on first run, persisted to
/var/lib/pgpipe/pgpipe-admin.password (mode 0600), and survives restarts. The "FIRST RUN" log banner only appears the first time — after that, the file is the only copy.
To set your own password instead, edit pgpipe.yaml →
server.auth.password before bringing the stack up. For production, prefer an environment variable like PGPIPE_DASHBOARD_PASSWORD over a value baked into YAML.
Container image
Dockerfile
Alpine-based, multi-arch (amd64 / arm64), pulls the verified pgpipe binary at build time. ~50 MB final image.
Compose
docker-compose.yml
Source PG · Destination PG · pgpipe wired together. Production-safe defaults — no benchmark hacks.
Config
pgpipe.example.yaml
Annotated reference config: source, destination, ordering, batching, state backend, observability.
Running pgpipe against your own databases? Drop the source-db and dest-db services from the compose file and edit pgpipe.yaml with your real hostnames. The Dockerfile builds the same image either way.
Linux packages
| Platform | File | Size | Download |
|---|---|---|---|
| Debian / Ubuntu (amd64)
sha256: 8f019aeffd4c463dc2582c3c1592a131ac587cf29ae28e7860c1e6bf0d8b7b2d | pgpipe_5.1.0_amd64.deb | 8.5 MB | Download |
| Debian / Ubuntu (arm64)
sha256: ffae0ed906b7d29279a945b4651241f1f73e13115c882aae89cbf308aa06c3dc | pgpipe_5.1.0_arm64.deb | 7.2 MB | Download |
| RHEL / Rocky / Fedora (x86_64)
sha256: 0ef0adfda4f4aeac019dae48cc64beef07e67274f9d8305b60c10b024f7df9d9 | pgpipe-5.1.0-1.x86_64.rpm | 11.2 MB | Download |
| RHEL / Rocky / Fedora (aarch64)
sha256: 2bd97bcb99d49bb0909cbe38dee13a06fcec57165425b5386d9103c9c9968aee | pgpipe-5.1.0-1.aarch64.rpm | 10.1 MB | Download |
Verification & companion files
- checksums.txt — SHA-256 for all binaries
- THIRD_PARTY_LICENSES.txt — open-source notices
Debian / Ubuntu (.deb)
wget https://www.pghorizon.com/downloads/pgpipe/v5.1.0/pgpipe_5.1.0_amd64.deb
sudo apt install ./pgpipe_5.1.0_amd64.deb
sudo systemctl enable --now pgpipe RHEL / Rocky / Fedora (.rpm)
wget https://www.pghorizon.com/downloads/pgpipe/v5.1.0/pgpipe-5.1.0-1.x86_64.rpm
sudo dnf install ./pgpipe-5.1.0-1.x86_64.rpm
sudo systemctl enable --now pgpipe Upgrading to v5.1.0? Four things to know
- Native-package upgrades now preserve service state. The new
.deb/.rpmkeeps enablement unchanged and restarts pgpipe only when it was already running. On the first Debian transition from an older affected package, verifysystemctl is-enabled pgpipeandsystemctl is-active pgpipeafter installation. - Runtime state now uses deterministic absolute paths. Native packages use
/var/lib/pgpipe. Before starting an installation with old working-directory-relative artifacts, stop the service and runpgpipe state diagnose; follow the exactstate migratecommand it prints. - Legacy destination authority requires explicit review. Incomplete pre-v5.1 lineage evidence exits safely with status
78before changing state or data. Keep the service stopped, runpgpipe admin destination-fence inspect, and use only the audited recovery command selected by that inspection. - Check destination fixed-character columns. v5.1 refuses the recognizable v5.0.0 omission where
character(n)became unboundedbpchar. If reported, rebuild and re-snapshot the affected destination table before replication resumes.
First time using pgpipe?
The Docker Compose quickstart gets you replicating in under a minute, with a sample source and destination already wired up.
See the quickstartpgpipe is provided as-is, free of charge, with no support SLA. For commercial support and managed deployments, talk to us.