What this project does:
- Dump your Planetscale database to a folder locally
- Runs a local Mysql database seeded with your dump
- Migrates your Mysql database to a Supabase Postgres database with Pgloader
- Calls pgloader via Docker to migrate your schema and data, there are some magic options required to do so:
- add
--no-ssl-cert-verification
to pgloader to not fail withX509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN
- add
quote identifiers
to not make all table names lowercase - renames the created schema from your Mysql database name to
public
in Postgres - enable row level security on all tables to prevent making them accessible to everyone
- add
Because Planetscale doesn't let you fetch more than 100000 rows at a time, throwing the error Row count exceeded 100000
-
Download this repository locally and cd inside it
-
Dump your Planetscale database to a folder locally with
pscale database --org org dump database branch --output ./dump
-
Run a local Mysql database seeded with your dump with. Wait until all sql files are loaded and keep the process running in the background for the next step.
# must be inside this repository folder docker compose up
If for some reason you need to recreate the Mysql database, you can do so with
docker compose down -v
, This will recreate the database with the dump -
Run the migration with this code. This runs the following file
npx migrate-planetscale-to-supabase
After completing the migration run
datasource db {
+ provider = "postgresql"
- provider = "mysql"
}
And pull the changes made by the migration
prisma db pull
Then check that your current code compiles and runs as expected
You can create a different Supabase project for each branch. Supabase has alpha branching support, but i would advise against using it now as it currently depends on a Github App integration.
- If you use Prisma, your enums and indexes will be renamed with kebab case, this is because Mysql doesn't give names to enums