Exporting your data
Download a pg_dump of any SupaHost project's database and a .tar.gz of all its Storage files from the Backups tab, and restore them into Postgres or another Supabase.
You can download a full copy of any project at any time, on every plan: the database as a pg_dump file and the Storage files as a .tar.gz archive. Use exports for your own off-site backups, for moving data elsewhere, or to load production data into a local environment.
Both exports are on Dashboard → your project → Backups, and only the owner can create them.
Database export (pg_dump)
- Open the Backups tab and click Create pg_dump.
- Wait for the job to finish. Large databases take longer; the job is stopped if it runs for more than 2 hours.
- Download the file. It's named
<project>-<YYYYMMDD-HHMM>.dump, for exampleapp-one-20261111-0930.dump.
The file is made with pg_dump -Fc (Postgres's custom format), which is compressed and lets pg_restore pick individual tables or schemas. It contains the project's whole database: your schemas and data, functions, triggers, RLS policies, the auth schema with users and identities, and the storage schema with bucket settings and object rows.
In a test, a 0.8 GB project's dump was restored into a fresh Supabase Postgres in 29 seconds.
Look inside a dump
# List what's in the file
pg_restore -l app-one-20261111-0930.dump | head -40
Restore into another Postgres
Restore only your own schema into a plain Postgres database:
pg_restore --no-owner --no-privileges --schema=public \
-d "postgresql://user:[email protected]:5432/bookings" \
app-one-20261111-0930.dump
--no-owner and --no-privileges skip Supabase role names such as anon and authenticated, which a plain Postgres doesn't have.
Restore into a local Supabase
With the Supabase CLI running locally:
supabase start
pg_restore --no-owner --no-privileges --schema=public \
-d "postgresql://postgres:[email protected]:54322/postgres" \
app-one-20261111-0930.dump
This loads your tables and data but not Auth users. If your tables have foreign keys to auth.users, pg_restore reports errors for those constraints, because the users they point at aren't there; the rest still loads. For local work it's often better to keep real user data out of your laptop and create test users instead; see Seeding data.
Storage export (Package files)
- On the Backups tab, click Package files.
- Wait for the job, then download
<project>-storage-<stamp>.tar.gz.
The archive contains:
| File | What's in it |
|---|---|
| Your files | The contents of every object in the project's buckets |
buckets.json |
The settings of each bucket |
objects.json |
The metadata of each object |
README.txt |
A description of the archive |
missing.txt |
Only present if some objects in the database had no file on disk |
Before it starts, the job checks the instance has enough free disk: 1.1 times the size of your files plus 512 MB. If there isn't enough space it won't start. The disk grows automatically as it fills, so space may be available later; if the export still won't start, email [email protected].
Unpack it with:
mkdir app-one-files && tar -xzf app-one-storage-20261111-0930.tar.gz -C app-one-files
Storage files aren't in the daily database backups, so this export is the way to keep your own copy of them. See Backups.
Download links
Download links look like https://acme.supahost.space/exports/<40 hex characters>/<file> and last 24 hours. The long random part of the URL is what protects the file, so treat the link like a password: don't paste it into public chats or tickets. After 24 hours, create a new export.
From a terminal:
curl -fLo app-one-20261111-0930.dump \
"https://acme.supahost.space/exports/<token>/app-one-20261111-0930.dump"
Other ways to get data out
- Studio can export a table as CSV from the table editor.
- The Data API can page through any table your key can read.
- SSH and the tunnel (Business and Enterprise) let you run
pg_dumpandpsqlyourself; see SSH access and direct Postgres.