Migration guide

Migrate your database, one screen at a time.

The whole move happens in the console - no CLI, no agents. Here is exactly what you will see at each step, from pasting your connection string to going live.

Read-only on your source Checksum-verified Free until you switch Rollback in zero clicks
Before you start

You need two things

A Swyftstack account and your source database's connection string. That's it - keep the string handy, you'll paste it in Step 2.

Your source connection string

A standard libpq URI: postgresql://user:password@host:5432/dbname. Grab it from your current provider's dashboard (each provider guide shows the exact menu path).

A quiet-ish window

The import never touches your source, but the final cutover restarts your app. Pick a low-traffic time so the ~30-second env-var swap is invisible to users.

Step 1

Open your project and start an import

In the console, open a project, go to Databases, and choose Import an existing database.

app.swyftstack.com/console
Import an existing database
Console → Databases → Import an existing database
Step 2

Paste your source connection string

Swyftstack connects read-only to your source to read its schema and data. You can name the new database and pick where it lives.

app.swyftstack.com/console
Source connection stringpostgresql://user:••••••@db.oldhost.com:5432/appNew database nameapp_productionStart importConnected read-only · your source is never modified
Paste the libpq URL - it is validated before anything runs
Step 3

Watch the import run

Dump, restore, and verify happen automatically with standard PostgreSQL tools. A live progress bar shows the current phase - you never have to guess.

app.swyftstack.com/console
Restoring · 67%Dumping schema + data from sourceRestoring onto Swyftstack PostgreSQL 16Verifying with checksums
Live progress: dumping → restoring → verifying
Step 4

Every byte is verified

Before you get a URL, tables, row counts, indexes, sequences, and extensions are checked end-to-end with checksums. A green check means the copy matches your source.

app.swyftstack.com/console
Verified - copy matches your sourcepublic.users48,120 rowspublic.orders216,904 rowsindexes + sequencesall presentextensions (pgcrypto, pg_trgm)migrated
Checksum-verified: row counts and objects match the source
Step 5

Swap one variable to go live

Copy the new connection string, drop it into your app's DATABASE_URL, and redeploy. Your old database is still running - if anything looks off, point the variable back. That's your rollback.

app.swyftstack.com/console
New connection stringpostgresql://app:••••••@db.swyftstack.com:5432/appCopyYour app's environmentDATABASE_URL=postgresql://…@db.oldhost.com/appDATABASE_URL=postgresql://…@db.swyftstack.com/app
Copy the new URL → update DATABASE_URL → redeploy

Migration guide FAQ

Is my source database ever modified?

No. We connect to your source read-only and copy out of it with standard PostgreSQL tools. Nothing is written back. Until you swap your app's connection string, your old database keeps serving all traffic.

How long does the import take?

Under 5 GB is usually 2-5 minutes; 5-50 GB is 10-45 minutes. You watch a live progress bar the whole time, so you always know where it is.

What if a step fails?

The import stops and tells you why - your source database is untouched and you can retry or email us. Most failures are a missing role or an unusual extension we resolve quickly.

Do I need the CLI or any agent?

No. Everything in this guide happens in the console in your browser. There is no CLI to install and no agent to run on your servers.

Can I roll back after cutover?

Yes - rollback is doing nothing. Because your old database is still live, if the new one looks wrong you just point your DATABASE_URL back and restart. Delete the old database only once the new one has run clean for a few days.

Ready when you are - free until you switch.

Paste a connection string, watch the verified import, copy your new URL. Nothing changes on your source until you decide it should.