3

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

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

收到以下错误。

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

4

2 回答 2

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"

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

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

于 2020-03-16T09:14:37.787 回答
0

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

于 2020-09-05T03:52:55.147 回答