Prisma迁移状态异常报错P3018、P3008如何在不删数据的情况下修复?
Prisma迁移P3018错误无数据损失修复方案
前置校验
- 确认当前主库的表结构与修改后的
20210819161149_some_migration迁移SQL执行后的预期结构完全一致,无结构差异 - 提前备份主库的
_prisma_migrations表数据,避免操作失误
修复步骤
- 计算修改后迁移文件的新校验值
Prisma迁移校验和为migration.sql文件内容的SHA256哈希值,可通过以下命令计算:- Linux/macOS 终端:
shasum -a 256 prisma/migrations/20210819161149_some_migration/migration.sql | awk '{print $1}' - Windows PowerShell:
Get-FileHash -Path prisma\migrations\20210819161149_some_migration\migration.sql -Algorithm SHA256 | Select-Object -ExpandProperty Hash
- Linux/macOS 终端:
- 更新主库迁移记录的校验和
在主库执行SQL语句替换原有校验值:
UPDATE _prisma_migrations SET checksum = '步骤1计算得到的SHA256值' WHERE migration_name = '20210819161149_some_migration';
- 本地开发环境修复(无数据损失)
如果本地主库有需要保留的业务数据,无需执行重置操作:
- 参照步骤1、2同样更新本地主库
_prisma_migrations表对应记录的校验和 - 删除prisma目录下的
migration_lock.toml文件 - 直接执行
prisma migrate dev即可恢复正常
如果本地无需要保留的业务数据,也可直接执行prisma migrate reset --force快速完成修复。
后续注意事项
- 已经推送到主分支、已经被其他环境/成员应用过的迁移文件禁止修改,新增结构变更必须新建迁移文件
- 其他已经拉取过旧迁移文件的开发成员,需要同步执行上述操作更新本地库的迁移校验和,避免重复出现报错
内容的提问来源于stack exchange,提问作者d512
相关产品推荐
相关产品推荐

