Overview
Supabase backs up paid projects automatically, but those backups sit in Supabase’s infrastructure and restore on Supabase’s terms. Add your own logical dumps in a separate account. RPO and RTO targets, secrets backup, and drills are in disaster-recovery; generic WAL archiving is in postgres-prod. Figures below come from the Supabase backups docs, checked October 2026.
Know what the default backups give you
- Daily backups: Pro keeps 7 days, Team 14, Enterprise up to 30. Free projects get no automatic backups; export with
supabase db dumpand keep copies off-site. - Backups cover the database. They do not include objects stored through the Storage API, so back those up separately.
Enable PITR only when the RPO is under a day, and plan for what it replaces
PITR streams WAL to object storage and restores to any second in the window; in the worst case the RPO is two minutes. It is an add-on for Pro, Team, and Enterprise, requires at least a Small compute add-on, and is not covered by the spend cap.
| Retention | Price |
|---|---|
| 7 days | about 0.137 per hour) |
| 14 days | about $200 per month |
| 28 days | about $400 per month |
Enabling PITR stops daily backups; the two are mutually exclusive. Add PITR in Project Settings > Add-ons, then restore from Database > Backups > Point in Time by picking a timestamp. An in-place restore makes the project inaccessible for a time that grows with database size. Prefer Restore to a New Project when you need to inspect or recover a subset: it builds a separate project from a daily or PITR backup without taking the source down. It does not copy Storage objects, Edge Functions, Auth settings, API keys, Realtime settings, extensions, or read replicas, so reconfigure those by hand.
Export nightly logical dumps to storage you control
A pg_dump is portable and independent of Supabase. After disabling PITR you also need one for a downloadable backup.
pg_dump "$DATABASE_URL" --format=custom --compress=9 --file="backup-$(date +%Y%m%d).dump"Keep daily dumps for 30 days and weekly dumps for 90, in a bucket under a separate cloud account; the restic-to-B2 pattern in hostinger-vps-backups applies unchanged. Restore a dump into a scratch database with pg_restore regularly; an unrestored dump is unverified (postgres).