Migrations
Learn how to create and manage database migrations in your application.
Note: This is mock/placeholder content for demonstration purposes.
Database migrations allow you to version control your database schema changes and apply them consistently across environments.
Creating a Migration
To create a new migration, use the following command:
pnpm --filter web supabase:db:diff
This will generate a new migration file in the apps/web/supabase/migrations directory based on the differences between your local database and the schema files.
Applying Migrations
To apply migrations to your local database:
pnpm --filter web supabase migrations up
Migration Best Practices
- Always test migrations locally first before applying to production
- Make migrations reversible when possible by including DOWN statements
- Use transactions to ensure atomic operations
- Add indexes for foreign keys and frequently queried columns
- Include RLS policies in the same migration as table creation
Example Migration
-- Create a new table
CREATE TABLE tasks (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
account_id UUID NOT NULL REFERENCES accounts(id) ON DELETE CASCADE,
title TEXT NOT NULL,
completed BOOLEAN DEFAULT false,
created_at TIMESTAMPTZ DEFAULT now()
);
-- Add RLS
ALTER TABLE tasks ENABLE ROW LEVEL SECURITY;
-- Create policies
CREATE POLICY "Users can view their account tasks"
ON tasks FOR SELECT
USING (account_id IN (SELECT get_user_accounts(auth.uid())));
Resetting the Database
To completely reset your local database with the latest schema:
pnpm supabase:web:reset
This will drop all tables and reapply all migrations from scratch.