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 --experimental
或 prisma2 migrate save --name “new-migration” --experimental
它应该工作
【讨论】:
以上是关于prisma2 migrate 错误:数据库中的迁移比本地多的主要内容,如果未能解决你的问题,请参考以下文章
prisma2:如何通过 prisma.user.findMany() 中的非必填字段进行过滤?
错误:P1014 模型“_migration”的基础表不存在
更新到 Pomelo 5.0.3 后,Migrations 中的排序错误