apps/docs/content/docs/orm/prisma-migrate/workflows/development-and-production.mdx
In a development environment, use the migrate dev command to generate and apply migrations:
npx prisma migrate dev
:::danger
migrate dev is a development command and should never be used in a production environment.
:::
This command:
_prisma_migrations tableThe migrate dev command will prompt you to reset the database in the following scenarios:
You can also reset the database yourself to undo manual changes or db push experiments by running:
npx prisma migrate reset
:::warning
migrate reset is a development command and should never be used in a production environment.
:::
This command:
:::info For MySQL and MongoDB this refers to the database, for PostgreSQL and SQL Server to the schema, and for SQLite to the database file. :::
For a simple and integrated way to re-create data in your development database as often as needed, check out our seeding guide.
Sometimes, you need to modify a migration before applying it. For example:
String[] to a Tag[]The --create-only command allows you to create a migration without applying it:
npx prisma migrate dev --create-only
To apply the edited migration, run prisma migrate dev again.
Refer to Customizing migrations for examples.
See: Team development with Prisma Migrate .
In production and testing environments, use the migrate deploy command to apply migrations:
npx prisma migrate deploy
migrate deploy should generally be part of an automated CI/CD pipeline, and we do not recommend running this command locally to deploy changes to a production database.
This command:
Compares applied migrations against the migration history and warns if any migrations have been modified:
WARNING The following migrations have been modified since they were applied:
20210313140442_favorite_colors
Applies pending migrations
The migrate deploy command:
See also:
Prisma Migrate makes use of advisory locking when you run production commands such as:
prisma migrate deployprisma migrate devprisma migrate resolveThis safeguard ensures that multiple commands cannot run at the same time - for example, if you merge two pull requests in quick succession.
Advisory locking has a 10 second timeout (not configurable), and uses the default advisory locking mechanism available in the underlying provider:
Prisma Migrate's implementation of advisory locking is purely to avoid catastrophic errors - if your command times out, you will need to run it again.
Since 5.3.0, the advisory locking can be disabled using the PRISMA_SCHEMA_DISABLE_ADVISORY_LOCK environment variable