database-migration - 棱柱迁移是不好的状态
问题描述
我们似乎已经让我们的 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 在不删除所有数据的情况下再次开心?
解决方案
一种可能的解决方法是根据您当前的模式/迁移历史记录您的开发数据库。您将需要一个单独的备份数据库,并且您将丢失现有的迁移历史记录,但它应该保留您的数据。
这是这个过程的样子
prisma
从您的文件夹以及_prisma_migrations
数据库中的表中删除所有迁移历史记录。- 创建一个新的备份数据库。
- 将项目连接到您的备份数据库并运行
prisma migrate dev --name baseline_migration
. 这将生成与您当前的 prisma 架构匹配的迁移。 - 连接回您的主数据库并运行生成的迁移基线
prisma migrate resolve --applied 20210426141759_baseline_migration
(迁移名称开头的数字会有所不同)。
您创建备份数据库并在该备份数据库中运行初始基线迁移的原因是您不想丢失主数据库中的数据。我意识到这不是一个理想的解决方案,但如果在保留现有开发工作流程的同时保留数据对您来说非常重要,它可能会起作用。
这篇关于将 Prisma Migrate 添加到现有项目的文章也值得一读。
推荐阅读
- c# - 如何解决从@Html.CheckBoxFor 自动生成的隐藏表单字段
- image - Xamarin 表单:基于字符串值隐藏 Flowlistview 项目,包括它在 UI 中的空间
- sql - 我想优化这个查询
- c# - 单击复选框或其文本时,如何设置选中的winform checkboxlist项目?
- r - if (pvals[minp] <= pent) { 中的错误:参数长度为零
- laravel - 如何接受或拒绝用户在 eloquent 模型上所做的更改?
- python-3.x - Python:写入文件失败且没有错误 - 获取一个空文件
- powershell - 如何在不破坏 Powershell 流水线的情况下使用绑定参数“别名”?
- excel - 搜索 ListBox 错误 _ 无法设置 List 属性。无效的属性值
- python - 功能不打印坐标