修改Django模型字段helptext的无Schema变更迁移是否会锁表
问题结论
这类仅修改help_text、无实际Schema变更的迁移,不会对业务数据表加锁。
具体原因
- Django的迁移执行逻辑是先解析迁移文件内的操作,仅当需要执行DDL(表结构修改)语句的操作才会触发对应的数据库操作,进而可能产生表锁。
- 仅修改字段
help_text的迁移,本质上仅更新Django迁移系统的版本追踪记录,完全不会向数据库发送任何修改业务表结构的请求,自然不会触发业务表的锁逻辑。 - 你用
manage.py sqlmigrate myapp命令得到空的SQL输出已经验证了这一点:整个迁移过程除了向Django自带的django_migrations系统表插入一条当前迁移版本的记录外,没有任何其他数据库操作。插入django_migrations表的操作为独立系统表的单行写入,锁仅会作用在这个系统表上,完全不会涉及业务数据表,也不会影响正常业务读写。
实用提示
如果担心线上迁移的风险,所有迁移执行前都可以先用sqlmigrate命令提前确认要执行的SQL内容,确认无风险后再上线执行。
内容的提问来源于stack exchange,提问作者Martin Faucheux
相关产品推荐
相关产品推荐

