prisma2 migrate 错误:数据库中的迁移比本地多

Posted

技术标签:

【中文标题】prisma2 migrate 错误:数据库中的迁移比本地多【英文标题】:prisma2 migrate Error: There are more migrations in the database than locally 【发布时间】:2020-06-26 16:24:06 【问题描述】:

我正在使用 prisma2 + typescript + nexus + graphql-yoga 构建后端应用程序。我现在在尝试通过运行命令保存迁移时定义了我的架构:

prisma2 migrate save --name "init" --experimental

得到以下错误。

错误:数据库中的迁移多于本地迁移。这 绝不能发生。本地迁移 ID:。远程迁移 ID: 20200312230215-init, 20200312232858-init2

【问题讨论】:

【参考方案1】:

这是由于针对数据库执行的迁移与 prisma/migrations 文件夹中的迁移不匹配所致。

在以下情况下会发生这种情况:

    使用prisma2 migrate save --name “init” --experimental 创建迁移 使用prisma2 migrate up --experimental 执行迁移 删除prisma/migrations 文件夹中的迁移文件 尝试运行prisma2 migrate save --name “new-migration” --experimental

在第 4 步,您将看到该错误。

Prisma 在名为 _Migration 的表中跟踪数据库中已执行的迁移。

要解决此问题,请尝试删除数据库中的_Migration 表。使用 SQLite,您可以这样做:

sqlite3 prisma/dev.db "delete from _Migration"

如果这不起作用,您需要重新创建数据库。如果您使用的是 sqlite,请删除 prisma/dev.db 文件(您将丢失数据库中的所有数据)。

为防止将来发生这种情况,请确保您从一个干净的数据库开始,如果您重复使用相同的数据库,请避免删除迁移文件(在它们被执行后在 prisma/migrations 中。

【讨论】:

如果您在执行迁移不同但使用相同数据库的不同分支之间切换,也会发生这种情况。 postgres 数据源也没有 _Migration 表。 我的解决方案是删除迁移文件夹并删除 postgres 中的数据库。【参考方案2】:

当 schema.Prisma 文件和您使用迁移的数据库发生冲突时会发生这种情况,您使用的是旧数据库并且有一个名为 _Migration 的表 怎么解决 所以请尝试通过用户界面或命令行删除他 name_database 从 _Migration 删除并尝试执行 yarn prisma migrate save --experimentalprisma2 migrate save --name “new-migration” --experimental 它应该工作

【讨论】:

以上是关于prisma2 migrate 错误:数据库中的迁移比本地多的主要内容,如果未能解决你的问题,请参考以下文章

prisma2:如何通过 prisma.user.findMany() 中的非必填字段进行过滤?

prisma2 订阅返回数据:null

错误:P1014 模型“_migration”的基础表不存在

更新到 Pomelo 5.0.3 后,Migrations 中的排序错误

如何修复 Laravel 中的“php artisan migrate”错误

用 Apollo-server 和 Prisma 2 开玩笑