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认同)