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 schema changes and apply them consistently across environments.
Creating a Migration
To create a new migration during development:
pnpm db:migrate
This runs Prisma migrate dev and creates a new migration in packages/database/src/prisma/migrations/.
Applying Migrations
To apply already checked-in migrations after pulling a branch or PR:
pnpm db:deploy
Run pnpm db:deploy before starting app code that expects newly added or renamed columns.
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 db:reset
This will drop all tables and reapply all migrations from scratch.