← 中文资源

简体中文版本

迁移失败后向前修复

当结构变更已部分执行时,优先用向前修复迁移而非回滚,避免数据丢失的意外。

阅读英文原文

目标

迁移先加列再因约束失败,留下半应用的结构并阻塞部署。本配方先检查迁移状态与已应用版本,定位失败的具体步骤,然后编写幂等的向前修复迁移补全结构(使用 IF NOT EXISTS 守卫),从而在不做破坏性回滚的情况下解阻部署;同时提醒已丢失的数据无法恢复。

步骤要点

  1. 检查迁移状态与已应用版本,定位失败步骤。
  2. 编写向前修复迁移并用 IF NOT EXISTS 保证幂等。
  3. 在预发库演练后再应用到生产。
  4. 确认结构符合预期且部署解阻。
migrate status
psql -c "SELECT * FROM schema_migrations ORDER BY version DESC LIMIT 5;"

排错提示

  • 重试可能因列已存在而失败,需幂等守卫。
  • 删列式回滚风险高,保留数据的向前修复更安全。
  • 无法恢复已丢失数据。

适用边界

  • 不重写结构历史。
  • 每个迁移都需自行保证幂等。