MuseMVP Docs
Database

Database Migrations

Managing database schema changes and migrations using Drizzle ORM.

MuseMVP uses Drizzle Kit for schema migrations. Migrations are SQL files generated from schema changes and applied in order to keep your database in sync with the codebase.

Migration Workflow

Edit src/backend/database/schema.ts — add tables, columns, or indexes.

Run pnpm drizzle:generate — Drizzle generates a new migration file in src/backend/database/migrations/.

Review the generated SQL — ensure it matches your intent.

Run pnpm drizzle:migrate — apply migrations to your database.


Migration Files

0000_complete_blazing_skull.sql
0001_muse_billing_contract.sql
0002_tranquil_wallflower.sql
meta/_journal.json
  • SQL files: Each migration is a numbered SQL file (e.g. 0001_*.sql).
  • Journal: meta/_journal.json tracks migration order and metadata.

Do Not Edit Applied Migrations

Once a migration has been applied to production, do not modify it. Create a new migration for further changes.


Commands Reference

CommandPurpose
pnpm drizzle:generateGenerate migration from schema diff
pnpm drizzle:migrateApply pending migrations
pnpm drizzle:pushPush schema directly (skips migrations; dev only)
pnpm drizzle:studioOpen Drizzle Studio for visual DB inspection

When to Use drizzle:push vs drizzle:migrate

ApproachUse Case
drizzle:migrateProduction, team projects, version-controlled schema changes
drizzle:pushLocal prototyping, quick schema iteration; no migration history

For production deployments, always use drizzle:migrate and commit migration files.


Configuration

Migrations use the same connection as the app. Ensure DATABASE_URL (or Hyperdrive for Cloudflare) is set before running:

# .env
DATABASE_URL="postgresql://user:pass@host:5432/dbname"

The Drizzle config in drizzle.config.ts reads from DATABASE_URL and outputs migrations to ./src/backend/database/migrations.