How to back up Supabase Postgres to Wasabi
RESTORE-TESTED · ENCRYPTED · IN A BUCKET YOU OWN
Supabase keeps your database running, but its snapshots live in the same account and region as the database itself. An off-site copy in your own Wasabi bucket protects you from the failures the platform can't: a bad migration, a locked account, or a compliance question you need a real answer to. Here's how to set it up in a few minutes — and, crucially, how to know the backup actually restores.
Step 1 — Get your Supabase connection string
Supabase dashboard → Project Settings → Database → Connection string. Choose the URI tab.
Use the direct connection or the session-mode pooler (port 5432). Do not use the transaction-mode pooler (port 6543) — it doesn't support the session state pg_dump needs, and your backup will fail. If your network is IPv4-only and the direct host won't resolve, the session pooler is the reliable choice.
A read-only role is all you need. The exact CREATE ROLE SQL is on the security page.
Step 2 — Create a Wasabi bucket and access keys
- In the Wasabi console, create a bucket (keep it private).
- Create an access key pair under Access Keys.
- Copy the access key, secret key, and the regional endpoint for your bucket.
Create an access key in the Wasabi console. Wasabi is fully S3-compatible with flat pricing and no egress fees.
Endpoint: https://s3.<region>.wasabisys.com Region: your bucket's region, e.g. us-east-1 Bucket: your-backup-bucket
Step 3 — Connect it to OffsiteDB
Paste the Supabase connection string, add Wasabi as your destination with the bucket and keys from Step 2, and choose a schedule (hourly to daily). OffsiteDB tests the connection, then runs pg_dump, gzips and seals the artifact with AES-256-GCM, and ships it to your bucket. The public schema holds your application data. The auth and storage schemas are managed by Supabase and aren't readable by a normal role — include them only if you connect with your full postgres credentials.
Step 4 — Know it restores (the part everyone skips)
Every snapshot is restore-drilled: OffsiteDB restores it into a throwaway Postgres cluster and counts the rows before marking it sealed. When you need it back, every artifact is a standard custom-format dump:
gunzip -c supabase-db_2026-06-09.dump.gz \ | pg_restore -d "$NEW_DATABASE_URL" --clean --if-exists
You also get a monthly Restore Drill Report with tested restore times — the document you forward when someone asks “are your backups tested?”