remorses / planetscale-to-supabase

Script to migrate Mysql data and schema to Supabase

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool



migrate-planetscale-to-supabase

I found all the pgloader options so you don't have to



What this project does:

  1. Dump your Planetscale database to a folder locally
  2. Runs a local Mysql database seeded with your dump
  3. Migrates your Mysql database to a Supabase Postgres database with Pgloader
  4. 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 with X509_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

Why not use pgloader directly on the remote Mysql database?

Because Planetscale doesn't let you fetch more than 100000 rows at a time, throwing the error Row count exceeded 100000

Usage

  1. Download this repository locally and cd inside it

  2. Dump your Planetscale database to a folder locally with

    pscale database --org org dump database branch --output ./dump
    
  3. 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

  4. Run the migration with this code. This runs the following file

    npx migrate-planetscale-to-supabase

If you use Prisma

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

How to migrate branches?

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.

Limitations:

  • If you use Prisma, your enums and indexes will be renamed with kebab case, this is because Mysql doesn't give names to enums

About

Script to migrate Mysql data and schema to Supabase


Languages

Language:TypeScript 55.4%Language:JavaScript 42.1%Language:CSS 2.5%