开发与生产
本页解释了如何在开发和生产环境中使用 Prisma Migrate 命令。
开发环境
在开发环境中,使用 migrate dev
命令来生成和应用迁移
npx prisma migrate dev
创建和应用迁移
migrate dev
是一个开发命令,绝不应在生产环境中使用。
此命令
- 重新运行影子数据库中现有的迁移历史,以检测 schema 漂移(已编辑或删除的迁移文件,或对数据库 schema 的手动更改)
- 将待处理的迁移应用于影子数据库(例如,同事创建的新迁移)
- 如果它检测到 Prisma schema 的更改,它会根据这些更改生成一个新的迁移
- 将所有未应用的迁移应用于开发数据库并更新
_prisma_migrations
表 - 触发制品(例如 Prisma Client)的生成
在以下情况下,migrate dev
命令将提示您重置数据库
- 由已修改或缺失的迁移引起的迁移历史冲突
- 数据库 schema 已偏离迁移历史的最终状态
重置开发数据库
您也可以通过运行以下命令来重置
数据库,以撤消手动更改或 db push
实验
npx prisma migrate reset
migrate reset
是一个开发命令,绝不应在生产环境中使用。
此命令
- 如果可能,删除数据库/schema¹,或者如果环境不允许删除数据库/schema¹,则执行软重置
- 如果数据库/schema¹ 已被删除,则创建同名的新数据库/schema¹
- 应用所有迁移
- 运行数据填充脚本
¹ 对于 MySQL 和 MongoDB,这指的是数据库;对于 PostgreSQL 和 SQL Server,指的是 schema;对于 SQLite,指的是数据库文件。
注意:要以简单集成的方式在开发数据库中根据需要频繁重新创建数据,请查看我们的数据填充指南。
自定义迁移
有时,您需要在应用迁移之前修改它。例如
- 您想要引入一个重大的重构,例如将博客文章标签从
String[]
更改为Tag[]
- 您想重命名字段(默认情况下,Prisma Migrate 将删除现有字段)
- 您想更改一对一关系的方向
- 您想添加无法在 Prisma Schema 语言中表示的特性——例如部分索引或存储过程。
--create-only
命令允许您在不应用迁移的情况下创建迁移
npx prisma migrate dev --create-only
要应用已编辑的迁移,请再次运行 prisma migrate dev
。
有关示例,请参阅自定义迁移。
团队开发
生产和测试环境
在生产和测试环境中,使用 migrate deploy
命令来应用迁移
npx prisma migrate deploy
注意:
migrate deploy
通常应作为自动化 CI/CD 管道的一部分,我们不建议在本地运行此命令以将更改部署到生产数据库。
此命令
-
将已应用的迁移与迁移历史进行比较,如果任何迁移已被修改,则会发出警告
WARNING The following migrations have been modified since they were applied:
20210313140442_favorite_colors -
应用待处理的迁移
migrate deploy
命令
- 如果迁移历史中缺少已应用的迁移,则不会发出警告
- 不会检测漂移(生产数据库 schema 与迁移历史的最终状态不同——例如,由于热修复)
- 不会重置数据库或生成制品(例如 Prisma Client)
- 不会依赖影子数据库
另请参阅
咨询锁
当您运行生产命令时,Prisma Migrate 会使用咨询锁,例如
prisma migrate deploy
prisma migrate dev
prisma migrate resolve
此安全措施确保多个命令不能同时运行——例如,如果您快速连续合并两个拉取请求。
咨询锁具有10 秒超时(不可配置),并使用底层提供程序中可用的默认咨询锁定机制
Prisma Migrate 对咨询锁的实现纯粹是为了避免灾难性错误——如果您的命令超时,您将需要再次运行它。
自 5.3.0
起,可以使用PRISMA_SCHEMA_DISABLE_ADVISORY_LOCK
环境变量禁用咨询锁。