[{"data":1,"prerenderedAt":402},["ShallowReactive",2],{"blog-en-three-ways-to-back-up-a-supabase-database":3},{"id":4,"title":5,"body":6,"category":364,"cover":365,"coverAlt":365,"description":366,"draft":367,"extension":368,"faq":369,"image":382,"keywords":383,"meta":389,"navigation":390,"ogTitle":391,"path":392,"published":393,"seo":394,"stem":395,"tldr":396,"updated":400,"__hash__":401},"blog_en\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database.md","Three ways to back up a Supabase database, and what each misses",{"type":7,"value":8,"toc":353},"minimark",[9,17,20,25,28,31,120,124,127,130,175,181,193,197,200,203,210,215,218,227,231,237,247,250,256,259,263,270,277,280,288,292,295,298,311,315,340],[10,11,12,13],"p",{},"Everyone building on Supabase eventually asks the same question, usually about a\nweek after launch and usually at two in the morning: ",[14,15,16],"strong",{},"if I break something,\ncan I get my data back?",[10,18,19],{},"The answer depends entirely on which of three routes you took, and each one\nmisses something the other two cover.",[21,22,24],"h2",{"id":23},"which-one-should-i-use","Which one should I use?",[10,26,27],{},"Turn on whatever your Supabase plan gives you, and then keep a copy somewhere\nelse. Those are two different jobs, and doing only the first is the mistake this\narticle exists to prevent.",[10,29,30],{},"The dashboard backup protects you against your own mistakes. A copy you hold\nprotects you against losing the account: a billing failure, a suspended project,\na password you cannot recover. Those are different disasters and they need\ndifferent answers.",[32,33,34,56],"table",{},[35,36,37],"thead",{},[38,39,40,43,46,53],"tr",{},[41,42],"th",{},[41,44,45],{},"Supabase dashboard",[41,47,48,52],{},[49,50,51],"code",{},"pg_dump"," by hand",[41,54,55],{},"Managed backups",[57,58,59,73,84,95,106],"tbody",{},[38,60,61,65,68,71],{},[62,63,64],"td",{},"Runs without you",[62,66,67],{},"Yes",[62,69,70],{},"No",[62,72,67],{},[38,74,75,78,80,82],{},[62,76,77],{},"You hold the copy",[62,79,70],{},[62,81,67],{},[62,83,67],{},[38,85,86,89,91,93],{},[62,87,88],{},"Survives losing the account",[62,90,70],{},[62,92,67],{},[62,94,67],{},[38,96,97,100,102,104],{},[62,98,99],{},"Checked before it counts",[62,101,70],{},[62,103,70],{},[62,105,67],{},[38,107,108,111,114,117],{},[62,109,110],{},"Cost",[62,112,113],{},"Paid plans only",[62,115,116],{},"Free",[62,118,119],{},"A subscription",[21,121,123],{"id":122},"what-a-backup-actually-contains","What a backup actually contains",[10,125,126],{},"Your tables, your rows, your indexes and functions, and your Row Level Security\nrules (the policies that decide who can read what, not just the tables they\napply to). That is the whole of it.",[10,128,129],{},"What it does not contain is everything that was never in the database:",[32,131,132,142],{},[35,133,134],{},[38,135,136,139],{},[41,137,138],{},"In the file",[41,140,141],{},"Not in the file",[57,143,144,152,160,168],{},[38,145,146,149],{},[62,147,148],{},"Table structure, with every column and constraint",[62,150,151],{},"Files in Storage: uploads, avatars, attachments",[38,153,154,157],{},[62,155,156],{},"Every row your users created",[62,158,159],{},"Auth provider settings, such as your Google or GitHub app",[38,161,162,165],{},[62,163,164],{},"Indexes and functions",[62,166,167],{},"Edge functions, which live in your repository",[38,169,170,173],{},[62,171,172],{},"Row Level Security policies",[62,174],{},[176,177],"diagram",{"alt":178,"caption":179,"src":180},"A database icon with an arrow leading into a file, ticked. Below it, an image icon with a struck-through arrow leading to the same file, crossed out.","A database backup is a copy of the database. Your uploaded files are somewhere else, on all three routes.","\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database\u002Fdatabase-not-files-1600x570.png",[10,182,183,184,187,188,192],{},"The one that catches people is ",[14,185,186],{},"Storage",". Every avatar, every uploaded PDF,\nevery image your users added lives in object storage, not in the database. The\ndatabase only holds the ",[189,190,191],"em",{},"path"," to each file. Restore a database backup into an\nempty project and you get a table full of links to files that are not there.",[21,194,196],{"id":195},"route-1-the-supabase-dashboard","Route 1: the Supabase dashboard",[10,198,199],{},"The easiest, and the one most people should turn on first. Supabase takes daily\nbackups on paid plans, and point-in-time recovery is available as an add-on if\nyou need to rewind to a specific minute rather than to last midnight.",[10,201,202],{},"What it is good at: it runs without you, it is complete, and restoring is a few\nclicks in a UI rather than a command you have to get right under pressure.",[10,204,205,206,209],{},"What it misses: ",[14,207,208],{},"the copy lives inside the account."," If the project is\nsuspended, the card on file fails, or you lose access to the login, the backups\nare behind the same door as the thing they were protecting. It is a fire escape\ninside the building.",[176,211],{"alt":212,"caption":213,"src":214},"Two accounts, both crossed out. In the first the backup file sits inside the account boundary and is greyed out with it. In the second the file stands outside the boundary and is still there.","The same lost account twice. The only thing that changed is which side of the line the copy was standing on.","\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database\u002Finside-the-account-1600x570.png",[10,216,217],{},"It is also not available at all on the free plan, which is where most\nfreshly-launched apps are sitting.",[10,219,220,221,226],{},"Which plan you are on decides whether you have this at all, and\n",[222,223,225],"a",{"href":224},"\u002Fblog\u002Fdoes-supabase-back-up-my-database","it takes two minutes to check",".",[21,228,230],{"id":229},"route-2-pg_dump-on-your-own-machine","Route 2: pg_dump on your own machine",[10,232,233,234,236],{},"Supabase is Postgres, so the standard Postgres tool works. ",[49,235,51],{}," writes the\nwhole database to a file you hold.",[238,239,244],"pre",{"className":240,"code":242,"language":243},[241],"language-text","pg_dump \"postgresql:\u002F\u002F…your connection string…\" \\\n  --clean --if-exists --no-owner \\\n  --file backup-2026-08-09.sql\n","text",[49,245,242],{"__ignoreMap":246},"",[10,248,249],{},"What it is good at: it is free, it is complete, the file is yours, and you can\nrestore it into a brand-new project on a different account. Of the three routes\nthis is the only one that survives losing everything else.",[10,251,205,252,255],{},[14,253,254],{},"it only happens when you remember."," That is not a\ntechnicality, it is the whole failure. The dump on your laptop is dated from\nwhenever you last thought about it, and the day you need it is never a day you\nwere thinking about it.",[10,257,258],{},"There is a second, quieter problem: an untested dump is a guess. A file that\nwas written while a migration was half-applied, or that silently truncated\nbecause the connection dropped, looks exactly like a good one until the day you\ntry to use it.",[21,260,262],{"id":261},"route-3-managed-backups","Route 3: managed backups",[10,264,265,266,269],{},"Something else takes the copy on a schedule, stores it away from your account,\nand ",[14,267,268],{},"checks that the copy is real before calling it done."," That last part is\nthe one that actually matters.",[10,271,272,273,276],{},"That is what Reeve Care does: several copies a day depending on plan, encrypted\nand held outside your Supabase account, each one verified by counting what came\nout against what went in. A backup only counts as taken once it has been\nverified, which is why the date shown in the dashboard is the date of the last\n",[189,274,275],{},"verified"," copy rather than the last attempt.",[10,278,279],{},"The honest trade-off: it costs money, and it is one more service in your stack.\nIf you are disciplined enough to run route 2 on a real schedule and test the\nrestores, you do not need it.",[10,281,282,283,287],{},"The whole cycle is drawn out on the ",[222,284,286],{"href":285},"\u002Fsupabase-backups","Supabase backups page","\n— the copy leaving Supabase, the check that follows it, and the button that\nputs it back.",[21,289,291],{"id":290},"have-you-ever-restored-one","Have you ever restored one?",[10,293,294],{},"That question decides whether you have a backup or a file that has never been\nopened. A dump nobody has read back is a guess about the future, and the moment\nyou find out it was wrong is the moment you needed it to be right.",[10,296,297],{},"A restore test does not have to be dramatic. Make a new Supabase project, load\nyour most recent backup into it, open the app against that project, and check\nthat a row you recognise is there. Half an hour, once a quarter. If the restore\nfails, you have found out on a Tuesday afternoon instead of during an outage.",[10,299,300,301,305,306,310],{},"If you want the wider list of things worth checking on a newly launched app,\nthe ",[222,302,304],{"href":303},"\u002Fchecklist","10-minute security checklist"," covers backups alongside the\nrest, and the ",[222,307,309],{"href":308},"\u002Fis-your-supabase-app-safe","Supabase safety guide"," goes through\nwhat else is commonly left open.",[21,312,314],{"id":313},"what-to-do-this-week","What to do this week",[316,317,318],"key-takeaways",{},[319,320,321,325,331,334,337],"ul",{},[322,323,324],"li",{},"Turn on whatever backup your Supabase plan includes. It is the cheapest thing on this list and takes about a minute.",[322,326,327,328,330],{},"Take one ",[49,329,51],{}," today and put the file somewhere that is not your laptop. Even a stale copy beats no copy.",[322,332,333],{},"Back up your Storage files separately. No database backup on any of these routes includes them.",[322,335,336],{},"Do one restore into a throwaway project, so that the next time you read that file is not the first time.",[322,338,339],{},"Decide how much data you could stand to lose, and pick a schedule from that number rather than from what feels responsible.",[10,341,342,343,347,348,352],{},"Worth reading next: if you assumed your builder's undo covered your data,\n",[222,344,346],{"href":345},"\u002Fblog\u002Fversion-history-is-not-a-backup","version history is not a backup"," is the\none to read first. After that, your database is only as private as the keys in\nfront of it, and ",[222,349,351],{"href":350},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","which API keys are safe in your frontend","\ncovers the one that bypasses every rule you set.",{"title":246,"searchDepth":354,"depth":354,"links":355},3,[356,358,359,360,361,362,363],{"id":23,"depth":357,"text":24},2,{"id":122,"depth":357,"text":123},{"id":195,"depth":357,"text":196},{"id":229,"depth":357,"text":230},{"id":261,"depth":357,"text":262},{"id":290,"depth":357,"text":291},{"id":313,"depth":357,"text":314},"Backups",null,"The dashboard, pg_dump, and a managed service. What each one actually saves, what it quietly leaves out, and which one survives losing the account.",false,"md",[370,373,376,379],{"q":371,"a":372},"Does the Supabase free plan include backups?","No. Daily backups start on the Pro plan, and point-in-time recovery is an add-on above that. On the free plan there is no automatic copy of your data anywhere, which surprises most people the first time they need one.",{"q":374,"a":375},"Is a backup the same as version history in my builder?","No, and this is the most expensive misunderstanding in this article. Lovable, Bolt and the rest version your CODE. Your database is a separate service holding your users, their content and their orders. Rolling your code back to yesterday does not roll your data back, and deleting a table in the Supabase editor leaves your code perfectly intact.",{"q":377,"a":378},"How often should I back up?","Ask instead how much you are willing to retype. If losing a day of signups would be annoying, nightly is enough. If losing an hour of orders would mean refunding people, you need something closer to hourly. The honest test is not the schedule, it is whether you have ever restored one.",{"q":380,"a":381},"Do I need to back up if my app has almost no users?","That is the cheapest time to start, because the data is small and the habit is what matters. The painful losses are rarely dramatic. They are a mistyped delete during a late-night fix, on a project with just enough real users that starting over is not an option.","\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database\u002Fcard-800x500.png",[384,385,386,387,388],"supabase backup","pg_dump supabase","supabase point in time recovery","restore supabase database","back up vibe coded app",{},true,"Three ways to back up a Supabase database","\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","2026-08-09",{"title":5,"description":366},"blog\u002Fthree-ways-to-back-up-a-supabase-database",[397,398,399],"Supabase's own backups are the easiest to turn on and the worst to rely on: the copy lives inside the account you might lose.","pg_dump is free and complete, and it only happens when you remember. Remembering is the part that fails.","None of the three back up your Storage files. That is a separate job whichever route you take.","2026-08-10","9AYyQu1M_JJCFTylFwJW0tWG7OT92xkqWEgjVqWvI40",1787826048204]