跳至主要内容

开发和生产

本页解释了如何在开发和生产环境中使用 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 模式语言中表示的功能——例如部分索引或存储过程。

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

© . This site is unofficial and not affiliated with Prisma Data, Inc.