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

Posted

技术标签:

【中文标题】prisma db push 和 prisma migrate dev 之间的区别【英文标题】:Difference between prisma db push and prisma migrate dev 【发布时间】:2021-10-02 23:32:51 【问题描述】:

prisma db pushprisma migrate dev 有什么区别?我什么时候应该使用另一种。文档说 prisma db push 只是关于模式原型设计,我不明白这是什么意思。

【问题讨论】:

我投票结束这个问题,因为它在文档 prisma.io/docs/concepts/components/prisma-migrate/… 中解释得很清楚 【参考方案1】:

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

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

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

    默认情况下,在对数据库架构应用更改后, 触发生成器(例如,Prisma Client)。你不需要 手动调用prisma generate

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

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

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

prisma migrate dev 用于您的本地环境,如 docs 中所述

migrate dev 是一个开发命令,绝不能用于 生产环境。

这个命令:

    按顺序重放影子数据库中的现有迁移历史记录 检测架构漂移(编辑或删除的迁移文件,或手动 更改数据库架构) 将挂起的迁移应用到 影子数据库(例如,同事创建的新迁移) 根据您对 Prisma 所做的任何更改生成新的迁移 运行之前的架构migrate dev 将所有未应用的迁移应用到 开发数据库并更新_prisma_migrations 表 触发工件的生成(例如,Prisma 客户端)

migrate dev 命令将提示您重置数据库中的 以下场景:

由修改或丢失的迁移引起的迁移历史冲突 数据库架构已偏离 迁移历史

如果您对此有任何其他问题,docs 中有此比较说明何时使用其中一个。

【讨论】:

这是非常不正确的。 prisma db push 从不用于生产环境。如文档中所述,它仅用于本地快速原型制作。针对生产环境的所有操作都应通过部署迁移来执行。

以上是关于prisma db push 和 prisma migrate dev 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

生成没有 DB 的 Prisma 模式,只有第 3 方 REST API

您如何使用具有多个突变的自定义文件正确播种 prisma DB?

Prisma 删除与复合键的多对多关系

Prisma 无法验证数据库服务器

如何减少 Prisma 选择(或包含)字段代码行

Prisma 基于计算域获取数据