跳到主要内容

开发与生产

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

开发环境

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

npx prisma migrate dev

创建和应用迁移

危险

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

此命令

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

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

重置开发数据库

你也可以通过运行以下命令自行 reset 数据库,以撤消手动更改或 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 Schema Language 中表示的特性 - 例如部分索引或存储过程。

--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 环境变量禁用咨询锁