prisma migrate dev
Creates and applies migrations during development. Requires a shadow database.
Command
bash
prisma migrate dev [options]
What It Does
- •Runs existing migrations in shadow database to detect drift
- •Applies any pending migrations
- •Generates new migration from schema changes
- •Applies new migration to development database
- •Updates
_prisma_migrationstable
Options
| Option | Description |
|---|---|
--name / -n | Name the migration |
--create-only | Create a new migration but do not apply it |
--schema | Custom path to your Prisma schema |
--config | Custom path to your Prisma config file |
--url | Override the datasource URL from the Prisma config file |
Removed in v7
- •
--skip-generate- Runprisma generateexplicitly - •
--skip-seed- Runprisma db seedexplicitly
Examples
Create and apply migration
bash
prisma migrate dev
Prompts for migration name if schema changed.
Named migration
bash
prisma migrate dev --name add_users_table
Create without applying
bash
prisma migrate dev --create-only
Useful for reviewing migration SQL before applying.
Full workflow (v7)
bash
prisma migrate dev --name my_migration prisma generate # Must run explicitly in v7 prisma db seed # Must run explicitly in v7
Migration Files
Created in prisma/migrations/:
code
prisma/migrations/ ├── 20240115120000_add_users_table/ │ └── migration.sql ├── 20240116090000_add_posts/ │ └── migration.sql └── migration_lock.toml
Schema Drift Detection
If migrate dev detects drift (manual database changes or edited migrations), it prompts to reset:
code
Drift detected: Your database schema is not in sync. Do you want to reset your database? All data will be lost.
When to Use
- •Local development
- •Adding new models/fields
- •Changing relations
- •Creating indexes
When NOT to Use
- •Production deployments (use
migrate deploy) - •CI/CD pipelines (use
migrate deploy) - •MongoDB (use
db pushinstead)
Common Patterns
After schema changes
prisma
// schema.prisma - Add new field
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
createdAt DateTime @default(now()) // New field
}
bash
prisma migrate dev --name add_created_at
Handling data loss warnings
When a migration would cause data loss:
bash
prisma migrate dev --name remove_field # Warning: You are about to delete data... # Accept with: --accept-data-loss
Shadow Database
migrate dev requires a shadow database for drift detection. Configure in prisma.config.ts:
typescript
export default defineConfig({
datasource: {
url: env('DATABASE_URL'),
shadowDatabaseUrl: env('SHADOW_DATABASE_URL'),
},
})
For local Prisma Postgres (prisma dev), shadow database is handled automatically.