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