prisma db push
和prisma migrate dev
之间有什么区别?我应该在什么情况下使用它们?文档说prisma db push
只是关于模式原型设计,我不明白这是什么意思。
prisma db push
和prisma migrate dev
之间有什么区别?我应该在什么情况下使用它们?文档说prisma db push
只是关于模式原型设计,我不明白这是什么意思。
prisma db push
不应用于生产环境。
db push
使用与Prisma Migrate相同的引擎将您的Prisma模式与数据库模式同步,并且最适合用于模式原型。db push
命令:
调查数据库以推断并执行所需的更改,以使数据库模式反映您的Prisma模式的状态。
默认情况下,在将更改应用于数据库模式后,将触发生成器(例如,Prisma Client)。您无需手动调用
prisma generate
。如果
db push
预计更改可能会导致数据丢失,则会:
- 抛出错误
- 如果您仍然想要进行更改,则需要
--accept-data-loss
选项注意:
db push
不与迁移交互或依赖。迁移表不会更新,也不会生成任何迁移文件。
prisma migrate dev
在本地环境中使用,如文档所述。
migrate dev
是一个开发命令,不应在生产环境中使用。此命令:
- 重放影子数据库中现有的迁移历史记录,以检测模式漂移(编辑或删除的迁移文件,或手动更改数据库模式)
- 将待处理的迁移应用于影子数据库(例如,同事创建的新迁移)
- 从您在运行
migrate dev
之前对Prisma模式进行的任何更改生成新的迁移- 将所有未应用的迁移应用于开发数据库,并更新
_prisma_migrations
表- 触发生成工件(例如,Prisma Client)
在以下情况下,
migrate dev
命令将提示您重置数据库:
- 由修改或缺失的迁移引起的迁移历史记录冲突
- 数据库模式已漂移远离迁移历史记录的最终状态
如果您对此有其他问题,请参阅文档中的比较说明,以了解何时使用其中之一。
prisma db push
永远不应该用于生产环境。正如文档中所述,它仅适用于本地快速原型设计。所有针对生产环境的操作都应通过部署迁移来执行。 - Lauri Piispanendb push
而不是 prisma migrate dev/deploy
。https://www.prisma.io/docs/concepts/database-connectors/mongodb#considerations - Olivier Wilkinson根据文档:
使用 db push 在项目开始时原型化模式,并在第一稿满意后初始化迁移历史记录
使用 db push 原型化现有模式的更改,然后运行 prisma migrate dev 从您的更改中生成迁移(将要求您重置)
所以对于我来说,关键是只有第一次我必须运行 db push(到一个带有 heroku postgres 的 heroku 应用程序)。之后,所有迁移...
两者之间的主要区别在于迁移文件的生成。