跳至主要内容

开发和生产

本页介绍如何在开发和生产环境中使用 Prisma Migrate 命令。

开发环境

在开发环境中,使用 migrate dev 命令生成和应用迁移

npx prisma migrate dev

创建和应用迁移

危险

migrate dev 是一个开发命令,不应在生产环境中使用。

此命令

  1. 影子数据库中重新运行现有的迁移历史记录,以检测模式漂移(编辑或删除的迁移文件,或对数据库模式的手动更改)
  2. 将挂起的迁移应用于影子数据库(例如,同事创建的新迁移)
  3. 如果检测到对 Prisma 模式的更改,则会根据这些更改生成新的迁移
  4. 将所有未应用的迁移应用于开发数据库并更新 _prisma_migrations
  5. 触发工件的生成(例如,Prisma Client)

在以下情况下,migrate dev 命令将提示您重置数据库

重置开发数据库

您也可以通过运行以下命令自行重置数据库以撤消手动更改或db push实验

npx prisma migrate reset
警告

migrate reset 是一个开发命令,不应在生产环境中使用。

此命令

  1. 如果可能,删除数据库/模式¹,或者如果环境不允许删除数据库/模式¹,则执行软重置
  2. 如果删除了数据库/模式¹,则使用相同的名称创建一个新的数据库/模式¹
  3. 应用所有迁移
  4. 运行种子脚本

¹ 对于 MySQL 和 MongoDB,这指的是数据库,对于 PostgreSQL 和 SQL Server 指的是模式,对于 SQLite 指的是数据库文件。

注意:有关一种简单且集成的在开发数据库中根据需要重新创建数据的方法,请查看我们的种子指南

自定义迁移

有时,您需要在应用迁移之前修改迁移。例如

  • 您想引入重大的重构,例如将博客文章标签从 String[] 更改为 Tag[]
  • 您想重命名字段(默认情况下,Prisma Migrate 将删除现有字段)
  • 您想更改 1-1 关系的方向
  • 您想添加 Prisma 模式语言无法表示的功能 - 例如部分索引或存储过程。

--create-only 命令允许您创建迁移而不应用它

npx prisma migrate dev --create-only

要应用已编辑的迁移,请再次运行 prisma migrate dev

有关示例,请参阅自定义迁移

团队开发

参见:使用 Prisma Migrate 进行团队开发

生产和测试环境

在生产和测试环境中,使用 migrate deploy 命令应用迁移

npx prisma migrate deploy

注意migrate deploy 通常应作为自动化 CI/CD 管道的组成部分,我们不建议在本地运行此命令以将更改部署到生产数据库。

此命令

  1. 将应用的迁移与迁移历史记录进行比较,如果任何迁移已被修改,则发出警告

    WARNING The following migrations have been modified since they were applied:
    20210313140442_favorite_colors
  2. 应用挂起的迁移

migrate deploy 命令

  • 不会在迁移历史记录中缺少已应用的迁移时发出警告
  • 不会检测漂移(生产数据库模式与迁移历史记录最终状态不同 - 例如,由于热修复)
  • 不会重置数据库或生成工件(例如 Prisma Client)
  • 不依赖影子数据库

另请参阅

咨询锁定

当您运行生产命令(例如)时,Prisma Migrate 会使用咨询锁定

  • prisma migrate deploy
  • prisma migrate dev
  • prisma migrate resolve

此安全措施可确保多个命令无法同时运行 - 例如,如果您快速连续合并两个拉取请求。

咨询锁定具有10 秒超时(不可配置),并使用底层提供程序中可用的默认咨询锁定机制

Prisma Migrate 的咨询锁定实现纯粹是为了避免灾难性错误 - 如果您的命令超时,您需要再次运行它。

5.3.0 开始,可以使用PRISMA_SCHEMA_DISABLE_ADVISORY_LOCK 环境变量禁用咨询锁定