Django4.0 迁移-后端支持
所有 Django 支持的数据库后端都支持迁移,还有些支持表修改(通过 SchemaEditor 类实现)的第三方后端也支持。
然而,有些数据库在表结构变更方面比其它数据库更强;下面介绍一些注意事项。
PostgreSQL
PostgreSQL 在架构支持方面是所有数据库中是最强的。
唯一需要注意的是,在 PostgreSQL 11 之前,添加具有默认值的列会导致表的完全重写,时间长短与表的大小成正比。 因此,建议你始终使用 null=True
创建新列,因为这样可以立即添加它们。
MySQL
MySQL 缺乏对架构变更操作相关事务的支持,这意味着如果迁移失败,你将必须手动取消更改才能重试(无法回滚到较早的时间)。
此外,MySQL 几乎每一次架构操作都会完全重写表,一般来说,增加或删除列需要的时间与表的行数成正比。在速度较慢的硬件上,这可能比每百万行一分钟还要糟糕——在一个只有几百万行的表中添加几列,可能会让你的网站锁定十几分钟。
最后,MySQL 对列、表和索引的名称长度有相对较小的限制,并且对索引涵盖的所有列的组合大小也有限制。 这意味着在其他后端上创建的索引将可能无法在 MySQL 下创建。
SQLite
SQLite 几乎没有内置的架构更改支持,因此 Django 尝试通过以下方式对其进行模拟:
- 使用新架构创建新表
- 复制数据
- 删除旧表
- 重新命名新表,使之与原表名相匹配。