prisma db push 和 prisma migrate dev 之间的区别

Ahm*_*han 29 prisma

prisma db push和 和有什么不一样prisma migrate dev?我什么时候应该使用其中一种而不是另一种。文档说 prisma db Push 仅与模式原型有关,我不明白这是什么意思。

小智 10

它们服务于两种不同的环境。正如文档prisma db push中所述,不能在您的生产环境中使用

db push 使用与 Prisma Migrate 相同的引擎来同步 Prisma 架构与数据库架构,并且最适合架构原型设计。命令db push:

  1. 内省数据库以推断并执行使数据库架构反映 Prisma 架构状态所需的更改。

  2. 默认情况下,将更改应用于数据库模式后,会触发生成器(例如,Prisma 客户端)。您不需要手动调用prisma generate.

  3. 如果db push预计更改可能会导致数据丢失,它将:

  • 抛出错误
  • --accept-data-loss如果您仍想进行更改,则需要该选项

注意:db push不与迁移交互或依赖迁移。迁移表不会更新,也不会生成迁移文件。

如文档prisma migrate dev中所述,在您的本地环境中使用

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

这个命令:

  1. 重播影子数据库中的现有迁移历史记录,以检测架构漂移(编辑或删除的迁移文件,或对数据库架构的手动更改)
  2. 将待处理的迁移应用到影子数据库(例如,同事创建的新迁移)
  3. 根据运行前对 Prisma 架构所做的任何更改生成新的迁移migrate dev
  4. 将所有未应用的迁移应用到开发数据库并更新_prisma_migrations表
  5. 触发工件的生成(例如,Prisma 客户端)

在以下情况下,该migrate dev命令会提示您重置数据库:

  • 由于修改或丢失迁移而导致的迁移历史记录冲突
  • 数据库架构已偏离迁移历史的最终状态

如果您对此有任何其他问题,可以在文档中进行比较,解释何时使用其中一种。

  • 这是非常危险的错误。`prisma db Push` 永远不会在生产环境中使用。正如文档中所述,它仅用于本地快速原型制作。针对生产环境的所有操作都应通过部署迁移来执行。 (9认同)
  • 等等,如果“db Push”“不在您的生产环境中使用”,而“migrate dev”“在您的本地环境中使用”......那么我应该在生产中使用什么? (3认同)