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

gan*_*ukh 3 prisma nexus-prisma prisma2

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

得到以下错误。

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

Dan*_*iel 8

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

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

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

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

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

要解决该问题,请尝试删除_Migration数据库中的表。使用 SQLite,您可以执行以下操作:

sqlite3 prisma/dev.db "delete from _Migration"
Run Code Online (Sandbox Code Playgroud)

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

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