跳到主要内容

开发与生产

本页解释了如何在开发和生产环境中使用 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 命令将提示您重置数据库

重置开发数据库

您也可以通过运行以下命令来重置数据库,以撤消手动更改或 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 将删除现有字段)
  • 您想更改一对一关系的方向
  • 您想添加无法在 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 环境变量禁用咨询锁。

© . All rights reserved.