Fixes & guides
Postgres backup problems, solved for real
Short, command-first answers to the backup and restore errors people actually hit. No fluff, no login wall.
The method
- How to actually test a Postgres backup: the 5-step drillManifest, disposable container, counts, constraints, probes. The page everything else links to.
- pg_dump formats: custom, plain, directory or tar?What each flag costs you at restore time — compression, parallel jobs, selective restore.
- pg_dump vs pg_basebackup vs PITRLogical, physical, point-in-time: what each one recovers, and why a replica isn't a backup.
- pg_dumpall vs pg_dump: what a per-database dump leaves behindRoles, tablespaces and the CREATE DATABASE line live outside your dump. The combination that covers both.
Supabase
- pg_dump "Network is unreachable"Direct connections are IPv6-only. The Session Pooler fix.
- pg_dump fails through the Transaction Pooler (port 6543)Prepared-statement errors, hangs — why transaction mode breaks pg_dump.
- Backing up a Free-plan projectThe free plan includes zero backups. The complete routine.
- Project paused? Get your data outRestore, export immediately, stop the cycle.
Other hosts
- Neon: what the Free plan gives you, and how to exportShort restore windows, pooled vs direct strings, offsite copies.
- Railway Postgres backupsPublic vs internal connection strings, scheduling, offsite storage.
Self-hosted
- Coolify Postgres backupsS3 setup, retention gotchas, and the restore test nobody runs.
- Dokploy Postgres backupsSame rigor, Dokploy edition.
- Backing up Postgres in Docker ComposeThe right exec command, and why copying the volume of a running container isn't a backup.
Dump errors
- pg_dump "permission denied for table"Why GRANT ON ALL TABLES stops working after the next migration — and the RLS case where the dump succeeds with rows missing.
- pg_dump hangs, and the application hangs with itACCESS SHARE on every table, one queued ALTER TABLE, and the reads pile up behind it. --lock-wait-timeout.
Restore errors
- pg_restore "unsupported version in file header"The version rule, and the Docker one-liner that fixes it.
- pg_restore "role does not exist"Dumps carry ownership and GRANTs but never the roles. Two correct fixes.
- pg_restore "relation already exists"Restoring into a database that isn't empty: --clean, --if-exists, --create, and what each one misses.
Backups that prove they restore
pgProof automates everything on this page: scheduled backups, restore-tested every time, proof in your inbox. Supabase, Neon, Railway, Render and self-hosted.
Join the early-access waitlist