Do I Need Database Backups Before I Launch My Beta, and How Do I Set Them Up?
6 min read
Yes. Before a single real user signs up, you need automatic backups running and you need to have restored one at least once. The moment other people put real data into your app, that data is no longer something you can afford to lose, and a beta is exactly when a wrong migration or a fat-fingered delete tends to happen.
Why this happens
When you built the app with an AI agent, the goal was "make it work." Backups do not make anything work in the demo, so they never came up. The agent created tables, wrote queries, and got the feature running. It did not, and would not, turn on a recovery plan you never asked for.
Most managed databases do keep some backups by default, but "some" is doing a lot of work in that sentence. Free tiers often keep nothing, or keep a single daily snapshot for a few days, or keep backups that you have never tested and therefore do not actually have. A backup you cannot restore is not a backup. It is a hope.
How to check
Find out what you actually have, per platform:
- Supabase. Dashboard, Database, Backups. Free projects get daily backups with a short retention, and no Point in Time Recovery. Paid projects can enable PITR. Note the retention window and whether PITR is on.
- Neon. Neon keeps a history window for branching and restore. Check Settings, Restore, and read the retention period. On free tiers it is short.
- Railway, Render, Fly, or a raw Postgres. Check the provider's dashboard for "backups" or "snapshots." If you do not see a schedule, assume there is not one.
Then run the check that matters: can you list a recent backup and its timestamp? If you cannot point at a backup from the last 24 hours, you are running without a net.
The fix
- Turn on automatic backups. On Supabase, upgrade the project if you need
PITR and enable it. On Neon, confirm the restore window covers at least a day
or two. On self-managed Postgres, schedule
pg_dumpon a cron, or use your provider's managed snapshots. - Take one manual backup right now. For any Postgres:
Store that file somewhere off the database host, for example cloud storage you control.pg_dump "YOUR_CONNECTION_STRING" -Fc -f backup-$(date +%F).dump - Restore it to prove it works. Spin up a throwaway database and load the
dump into it:
Open the restored copy and confirm your tables and rows are there. A backup you have never restored is untested.pg_restore -d "THROWAWAY_CONNECTION_STRING" backup-YYYY-MM-DD.dump - Write down the recovery steps. Two or three lines: where backups live, how to restore, how long it takes. On a bad day you will not want to work it out from scratch.
- Set retention to survive a slow discovery. Data loss is often noticed days later. A one-day window will not save you. Aim for at least seven days.
The trap to avoid
Do not assume the managed database has you covered because it is "managed." The most common wrong move is reading "daily backups included" on a pricing page and treating the problem as solved. You have not confirmed the retention, you have not confirmed PITR is on, and above all you have never restored one. Test it or you do not have it.
Where this fits
Backups are the difference between a beta wobble and a beta that ends your project. Getting them on, and restoring one to be sure, is one of the plainest readiness wins there is. The free Readiness Report checks whether your real project has working backups and flags the gap before your users find it. The Finishing Pass hands you the fixes in order. And once backups exist, read how to restore your database if you delete real user data and how to run a migration without losing data, because those are the two moments you will actually need the net.