How to create new migrations and update the database schema in your Next.js Supabase application
Learn how to create new migrations and update the database schema in your Next.js Supabase application
Creating a schema for your data is one of the primary tasks when building a new application. In this guide, we'll walk through how to create new migrations and update the database schema in your Next.js Supabase application.
A quick word on migrations
Supabase's hosted Studio is pretty great - but I don't think it should be used to perform schema changes. Instead, I recommend using your local Supabase Studio to make the changes and then generate the migration file. Then, you can push the migration to the remote Supabase instance.
At this point, you have two options:
- create a migration with
pnpm --filter web supabase migration new <name>
and update the code manually - or, use the local Supabase Studio to make the changes and then run
pnpm --filter web supabase db diff -f <name>
which will generate the migration file for you. DOUBLY CHECK THE FILE!
Once you've tested it all and are happy with your local changes, push the migration to the remote Supabase instance with pnpm --filter web supabase db push
.
Doing the opposite is also okay - but:
- You're making changes against the production database - which is risky
- You're not testing the changes locally - which is risky
- You need to pull the changes from the remote Supabase instance to your local instance so they are in sync
Creating a Migration
The first step towards building your app schema is to create a new migration.
To do so, run the command:
pnpm --filter web supabase migration new <name>
The migration will be generated at apps/web/supabase/migrations
.
Once added some SQL commands, you need to reset the schema for it to take effect:
pnpm run supabase:web:reset
The schema is now populated! Yay!
Generating Supabase types
Now that your schema is populated, you need to generate the types so that your Supabase client can work correctly.
Please run the following command:
pnpm run supabase:web:typegen
Your Supabase client will now correctly infer the types with your schema changes.