首页 > 解决方案 > 棱柱迁移是不好的状态

问题描述

我们似乎已经让我们的 prisma 迁移进入了一个糟糕的状态。当我们得到最新的代码并运行

prisma migrate dev

我们得到

迁移20210819161149_some_migration未能完全应用于影子数据库。错误代码:P3018 错误:无法应用迁移。在从错误恢复之前无法应用新的迁移。阅读有关如何解决生产数据库中的迁移问题的更多信息:https ://pris.ly/d/migrate-resolve

迁移名称:20210819161149_some_migration

数据库错误代码:1065

源代码管理中的所有迁移都与_prisma_migrations表中的迁移匹配,所以我不确定它为什么认为20210819161149_some_migration失败。logs该记录的列中没有任何内容_prisma_migrations。我认为发生的事情是开发人员应用了迁移,然后在migration.sql事后更改了它。

无论如何,我们按照https://pris.ly/d/migrate-resolve概述的步骤进行操作,但它们似乎无法解决问题。它首先建议运行

prisma migrate resolve --rolled-back "20210819161149_some_migration"

但这会导致

错误:P3012

迁移20210819161149_some_migration无法回滚,因为它不处于失败状态。

因此,我们尝试将其标记为已应用

prisma migrate resolve --applied "20210819161149_some_migration"

但这会导致此错误

错误:P3008

迁移20210819161149_some_migration已在数据库中记录为已应用。

我们也试过跑步

 prisma migrate deploy

这使

在 prisma/migrations 中发现 13 个迁移警告以下迁移自应用以来已被修改:20210819161149_some_migration

但是在运行时您仍然会遇到上述相同的问题prisma migrate dev

有没有办法让 prisma 在不删除所有数据的情况下再次开心?

标签: database-migrationprisma

解决方案


一种可能的解决方法是根据您当前的模式/迁移历史记录您的开发数据库。您将需要一个单独的备份数据库,并且您将丢失现有的迁移历史记录,但它应该保留您的数据。

这是这个过程的样子

  1. prisma从您的文件夹以及_prisma_migrations数据库中的表中删除所有迁移历史记录。
  2. 创建一个新的备份数据库。
  3. 将项目连接到您的备份数据库并运行prisma migrate dev --name baseline_migration . 这将生成与您当前的 prisma 架构匹配的迁移。
  4. 连接回您的主数据库并运行生成的迁移基线prisma migrate resolve --applied 20210426141759_baseline_migration (迁移名称开头的数字会有所不同)。

您创建备份数据库并在该备份数据库中运行初始基线迁移的原因是您不想丢失主数据库中的数据。我意识到这不是一个理想的解决方案,但如果在保留现有开发工作流程的同时保留数据对您来说非常重要,它可能会起作用。

这篇关于将 Prisma Migrate 添加到现有项目的文章也值得一读。


推荐阅读