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

  1. Always test migrations locally first before applying to production
  2. Make migrations reversible when possible by including DOWN statements
  3. Use transactions to ensure atomic operations
  4. Add indexes for foreign keys and frequently queried columns
  5. 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.