Prisma db push和Prisma migrate dev的区别是什么?

25

prisma db pushprisma migrate dev之间有什么区别?我应该在什么情况下使用它们?文档说prisma db push只是关于模式原型设计,我不明白这是什么意思。


1
我投票关闭此问题,因为它在文档https://www.prisma.io/docs/concepts/components/prisma-migrate/db-push#choosing-db-push-or-prisma-migrate中已经清楚地解释了。 - Danila
4个回答

8
它们提供两种不同的环境。在文档中明确指出,prisma db push不应用于生产环境。

db push使用与Prisma Migrate相同的引擎将您的Prisma模式与数据库模式同步,并且最适合用于模式原型。 db push命令:

  1. 调查数据库以推断并执行所需的更改,以使数据库模式反映您的Prisma模式的状态。

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

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

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

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

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

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

此命令:

  1. 重放影子数据库中现有的迁移历史记录,以检测模式漂移(编辑或删除的迁移文件,或手动更改数据库模式)
  2. 将待处理的迁移应用于影子数据库(例如,同事创建的新迁移)
  3. 从您在运行migrate dev之前对Prisma模式进行的任何更改生成新的迁移
  4. 将所有未应用的迁移应用于开发数据库,并更新_prisma_migrations
  5. 触发生成工件(例如,Prisma Client)

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

  • 由修改或缺失的迁移引起的迁移历史记录冲突
  • 数据库模式已漂移远离迁移历史记录的最终状态

如果您对此有其他问题,请参阅文档中的比较说明,以了解何时使用其中之一。


9
这是非常错误的。prisma db push 永远不应该用于生产环境。正如文档中所述,它仅适用于本地快速原型设计。所有针对生产环境的操作都应通过部署迁移来执行。 - Lauri Piispanen
1
请注意,如果您正在使用 Prisma 与 MongoDB,则应使用 db push 而不是 prisma migrate dev/deploy。https://www.prisma.io/docs/concepts/database-connectors/mongodb#considerations - Olivier Wilkinson

2

根据文档:

使用 db push 在项目开始时原型化模式,并在第一稿满意后初始化迁移历史记录

使用 db push 原型化现有模式的更改,然后运行 prisma migrate dev 从您的更改中生成迁移(将要求您重置)

所以对于我来说,关键是只有第一次我必须运行 db push(到一个带有 heroku postgres 的 heroku 应用程序)。之后,所有迁移...


2
  • Prisma db push会将您的prisma schema与数据库schema同步(并格式化)。
  • 而prisma migrate dev命令会自动生成SQL迁移文件(保存在/prisma/migrations中),并将其应用于数据库。

两者之间的主要区别在于迁移文件的生成


0
我已从prisma db push更改为prisma migrate dev,因为prima db push无法允许我将列名更改为所需的不同名称。
例如:表USER有一个名为employee_name的列,您想将其更改为name。如果您使用prisma db push,则数据将丢失。您必须使用prisma migrate dev来完成此操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接