我正在使用prisma2 + typescript + nexus + graphql-yoga 构建后端应用程序。我现在已经定义了我的模式,同时尝试通过运行命令 prisma2 migrate save --name "init"--experimental 来保存迁移

得到以下错误。

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

最佳答案

这是由于针对数据库执行的迁移与 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 中)。

    关于Prisma2 迁移错误 : There are more migrations in the database than locally,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60691027/

    10-12 00:37
    查看更多