跳到主要内容

开发与生产

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

开发环境

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

npx prisma migrate dev

创建和应用迁移

危险

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

此命令

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

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 架构语言中表示的功能 - 例如部分索引或存储过程。

--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 客户端)
  • 依赖于影子数据库

另请参阅

咨询锁定

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

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

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

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

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

5.3.0 版本以来,可以使用 PRISMA_SCHEMA_DISABLE_ADVISORY_LOCK 环境变量 禁用咨询锁定