Neon Postgres backup: the complete picture
THE HISTORY WINDOW · WHY BRANCHES AREN'T BACKUPS · OWNING YOUR COPY
Neon's architecture is genuinely clever — storage and compute are separated, history is retained continuously, and any point in the window can become a live branch in seconds. That cleverness is also why Neon users skip backups more confidently than anyone else: it feels covered. Here's precisely what is and isn't.
What Neon gives you natively
- A continuous history window. Restore (or branch from) any moment within it — about a day on the free plan, longer on paid tiers. Within the window, this beats daily snapshots comfortably.
- Instant branching. Copy-on-write branches for dev, test, and point-in-time inspection, without doubling storage.
Why a branch is not a backup
A branch is a bookmark into the same storage — same platform, same project, same account, same blast radius. It cannot be downloaded, cannot outlive the account, expires with the history window's economics, and has never been proven to restore as an independent artifact. Branching protects you from your own mistakes inside the window; it does nothing against a locked account, a billing lapse, a platform incident, or any need to reach back further than the window. Those need a copy that leaves the building.
The three gaps the window doesn't close
- Blast radius. History, branches, and database share one account and platform. Every failure mode that takes the database also takes its recovery story.
- Bounded retention. The window is days, not months. Compliance asks, customer disputes, and “when did this row change?” investigations routinely need to reach back further.
- No restore proof, no artifact. Nothing exportable exists — no file in your bucket, no drill log, nothing to attach when a security review asks “show us a tested restore.”
Your options, honestly
History window alone
- Excellent recovery inside its range, zero setup.
- On-platform only; bounded by days; nothing exportable or proven.
- Fine pre-revenue, or when the data is replaceable.
DIY pg_dump cron
- Free; works against the unpooled endpoint; you own the copies.
- Silent failures, key management, and untested restores — forever.
- Honest comparison: OffsiteDB vs a cron job.
Window + automated off-site
- Keep Neon's window for fast in-platform recovery.
- Encrypted dumps to your own S3/R2/B2 bucket, restore-drilled and row-counted.
- Retention in months, tagged pre-migration checkpoints, monthly drill reports.
Set it up: Neon to a bucket you own
Each guide covers the Neon-specific gotchas — the pooled-vs-unpooled endpoint trap, sslmode=require, and a one-command restore:
- Back up Neon Postgres to Amazon S3
- Back up Neon Postgres to Cloudflare R2
- Back up Neon Postgres to Backblaze B2
- Back up Neon Postgres to Wasabi
Doing it by hand? The pg_dump generator writes the right flags, and the RTO/RPO calculator puts numbers on your current exposure.
Five minutes to a proven copy
Paste your unpooled Neon connection string, point it at your bucket, and the first encrypted, restore-drilled snapshot runs in minutes. Start free, poke at the live demo, or see the restore-drill report you'd be forwarding to auditors.
FAQ
Does Neon back up my database automatically?
Isn't Neon's branching basically a backup?
Which Neon connection string do I use for pg_dump?
Do Neon's native features protect me from a bad migration?
What's the safest minimal setup for Neon?
Keep reading
- Back up before the migration — tagged checkpoints sealed before each deploy
- Anatomy of a bad migration — minute by minute
- Supabase backup: the complete picture — running both? Same map, different platform