数据迁移与回填:从 Django Migrations 到“可回滚”方案

业务演进离不开迁移与数据回填,关键是“可控风险”。

一、不可空字段的灰度引入

添加字段 null=True, blank=True;

线上回填数据(异步、分批、幂等);

校验无空后,迁移改为 null=False 并设置默认;

加索引(必要时 CONCURRENTLY)。

二、数据回填脚本

使用 QuerySet.iterator(chunk_size=...) 分批处理;

控制速率,避免长事务;

失败记录到独立表,支持幂等重试。

三、迁移压缩(squash)

历史迁移过多时合并,减少部署时间与风险;

合并前务必在全环境跑回归测试。

我把“回填脚本模板”和“迁移操作手册”做成脚手架,一直保存在团队仓库与 gplpal 的内部知识库里便于复用。

评论 0