Django恢复测试服务器备份后出现InconsistentMigrationHistory迁移错误
问题根因
报错触发的核心逻辑是:rmas.0001_initial迁移文件的依赖声明中包含equipment.0002_auto_20210629_1540,但当前数据库的django_migrations表中,rmas.0001_initial已经被标记为已执行,依赖的equipment.0002_auto_20210629_1540反而处于未执行状态,违反了Django的迁移历史一致性校验规则。
解决方案
无业务数据保留需求场景
如果当前环境无需保留现有数据,按顺序执行以下操作:
- 删除现有数据库,重新创建空白的PostgreSQL库
- 优先执行被依赖应用的迁移:
python manage.py migrate equipment python manage.py migrate inspections python manage.py migrate repairs
- 执行全量迁移完成操作:
python manage.py migrate
需保留业务数据场景(导入测试服备份场景适用)
如果是导入测试服务器的备份数据、需要保留现有业务数据,按以下步骤操作:
- 手动标记测试服已执行过、当前环境未标记的迁移为已执行状态:
python manage.py migrate --fake equipment 0002_auto_20210629_1540 python manage.py migrate --fake inspections 0002_auto_20210629_1540 python manage.py migrate --fake repairs 0002_auto_20210629_1540
- 执行剩余迁移即可:
python manage.py migrate
后续优化建议
- 检查
rmas.0001_initial迁移文件的dependencies配置项,确认对equipment.0002的依赖声明正确,避免后续新环境部署再次触发顺序问题 - Django 1.11的迁移执行顺序和
INSTALLED_APPS的注册顺序完全一致,可将equipment、inspections、repairs等被依赖应用调整到rmas之前注册,降低后续迁移冲突概率
内容的提问来源于stack exchange,提问作者epritchard
相关产品推荐
相关产品推荐

