跳到主内容

开发与生产

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

开发环境

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

npx prisma migrate dev

创建和应用迁移

危险

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

此命令

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

在以下场景中,migrate dev 命令将提示您重置数据库

重置开发数据库

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

npx prisma migrate reset
警告

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

此命令

  1. 如果可能,删除数据库/schema¹,或者如果环境不允许删除数据库/schema¹,则执行软重置
  2. 如果数据库/schema¹ 被删除,则创建同名的新数据库/schema¹
  3. 应用所有迁移
  4. 运行数据填充脚本

¹ 对于 MySQL 和 MongoDB,这指代数据库,对于 PostgreSQL 和 SQL Server 指代 schema,对于 SQLite 指代数据库文件。

注意:有关在开发数据库中根据需要简单集成地重新创建数据的方法,请查阅我们的数据填充指南

自定义迁移

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

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

--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 命令

  • 如果迁移历史中缺少已应用的迁移,则不会发出警告
  • 不会检测漂移(生产数据库 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 环境变量禁用建议性锁定