当前位置: 首页 > news >正文

【Prisma】如何修复(重建)已经损坏的迁移历史?

当 migrations 历史已经损坏,但是数据库的数据还是完好的,这时简单的方法是删除迁移历史记录,以数据库内容重建迁移历史,也就是以当前数据库的状态重建基线,具体如下。

实际情况是,当你应用 migrate 命令时报错,显示迁移历史记录丢失。

这种情况发生的原因是:你的数据库中存在一个名为_prisma_migrations的表,记录了过去所有的迁移历史(那几十个2025xxxx的记录),但你本地的prisma/migrations文件夹为空。Prisma 发现数据库记录的迁移在本地找不到,因此认为发生了“漂移(Drift)”。

千万不要运行prisma migrate reset,否则会清空所有数据。

按照以下步骤通过“基线化(Baselining)”来恢复迁移功能:

第一步:清理数据库中的迁移记录

由于你本地的迁移文件已经丢失,且你想重新开始,我们需要让数据库“忘记”之前的迁移历史。

连接到你的数据库(使用 pgAdmin, TablePlus 或命令行),执行以下 SQL:

-- 删除所有旧的迁移记录,这样 Prisma 就会认为这是一个新起点TRUNCATETABLE_prisma_migrations;

第二步:创建初始迁移文件(基线)

现在我们要根据当前的schema.prisma创建一个新的“起始”迁移文件,但不立即执行它(因为表已经在数据库里了)。

  1. 创建迁移文件夹(如果不存在):

    mkdir-p prisma/migrations/0_init
  2. 使用prisma migrate diff生成当前 schema 的全量 SQL:

    npx prisma migratediff\--from-empty\--to-schema-datamodel prisma/schema.prisma\--script>prisma/migrations/0_init/migration.sql

    这一步会把当前的模型定义生成为一个完整的migration.sql文件。

第三步:标记该迁移已完成(关键)

我们需要告诉 Prisma:“这个0_init迁移已经应用过了,你不需要再往数据库里跑 SQL 了”。

执行以下命令:

npx prisma migrate resolve --applied 0_init

第四步:同步并验证

现在你的本地文件(0_init)和数据库记录(_prisma_migrations表里的一条记录)就同步了。

尝试运行:

npx prisma migrate dev

结果预测:

  • 如果你的schema.prisma和 数据库结构完全一致,Prisma 会提示Already in sync
  • 如果你有细微改动,Prisma 会提示你创建一个新的迁移。

常见问题排查

1. 如果执行migrate resolve报错找不到文件?
确保目录结构如下:

prisma/ schema.prisma migrations/ 0_init/ migration.sql

2. 以后改了 schema 怎么办?
现在迁移功能已经恢复了。以后只需正常运行:

npx prisma migrate dev --name add_new_field

3. 为什么不直接用migrate dev --create-only
因为当数据库中存在_prisma_migrations记录而本地没有文件时,Prisma 的安全机制会强制要求reset。手动清空该表并resolve是绕过此机制且保护数据的标准做法。

建议:修复完成后,务必将新的migrations文件夹提交到 Git 仓库,防止再次丢失。

http://www.gsyq.cn/news/133362.html

相关文章:

  • Excalidraw能否成为下一代开源设计标准?
  • java图书馆教室自习室预约管理系统springboot-vue
  • Qwen3-32B-MLX-6bit:双模式推理新体验
  • java大学生实习实训项目基地管理系统springboot-vue
  • Fusion_lora:Qwen-Edit图像融合新方案
  • 42、Windows XP系统:账户密码管理与硬件配置指南
  • Hunyuan-1.8B:256K超长上下文轻量基座开源
  • SVDQuant量化版FLUX.1-Krea-dev发布:4-bit精度开启扩散模型高效推理新纪元
  • Excalidraw连线吸附功能优化建议与用户体验反馈
  • 腾讯Hunyuan-7B:中文长文本大模型新标杆
  • Excalidraw Docker镜像体积优化方案
  • ERNIE-4.5轻量版PT模型开源:0.36B参数文本生成新选择
  • Excalidraw CI/CD流水线架构图解
  • Excalidraw样式管理规范:CSS-in-JS还是原生?
  • RLPR-Qwen2.5-7B:免验证器推理新范式
  • Excalidraw结合AI生成token的商业变现路径
  • Excalidraw在敏捷开发中的10种创新应用场景
  • Excalidraw GitHub星标增长趋势分析:热度背后的原因
  • Excalidraw图形对齐与布局自动化的使用技巧
  • Excalidraw是否支持离线使用?PWA功能评测
  • Excalidraw TypeScript类型系统设计亮点解析
  • Excalidraw历史记录功能深度测试:撤销可靠吗?
  • Excalidraw PR合并策略观察:社区治理模式解读
  • Excalidraw HTTPS配置全流程:Let‘s Encrypt集成
  • cesium126,240311,Ce for Ue 加载天地图P2-修改和编译源代码:
  • 技术人必备的开源工具:Excalidraw手绘白板使用技巧
  • Excalidraw静态资源压缩与懒加载优化实践
  • 4、电脑操作与网络连接全攻略
  • 5、Windows XP 文件与网络操作全攻略
  • 23、Windows系统设置与相关术语详解