Skip to content

Database Migration

Workflow

1. Edit schema     → apps/web/src/db/schema.ts (Drizzle ORM)
2. Generate SQL    → pnpm db:generate (outputs to supabase/migrations/)
3. Apply locally   → pnpm db:reset (resets local DB with all migrations)
4. Test locally    → pnpm dev:web
5. Push to cloud   → pnpm db:push (applies migrations to Supabase Cloud)

Commands

bash
# Generate migration from schema changes
pnpm db:generate

# Apply migration to local DB
pnpm db:migrate

# Reset local DB (drop + recreate + apply all migrations)
pnpm db:reset

# Start/stop local Supabase
pnpm db:start
pnpm db:stop

# Push migrations to Supabase Cloud (production)
# First link: supabase link --project-ref <project-id>
pnpm db:push

Collaboration

Each developer runs their own local Supabase (Docker). Migration files in supabase/migrations/ are shared via Git.

Developer A (local DB)     Developer B (local DB)
       │                          │
       └── supabase/migrations/ (shared via Git) ──┘

When Developer A creates a new migration:

  1. A runs pnpm db:generate and commits the migration file
  2. B pulls and runs pnpm db:reset to sync schema