在Django中优化压缩迁移

时间:2019-03-06 16:52:19

标签: django django-migrations

我创建了一个压缩后的Django迁移,看起来像这样:

add field "name"
run sql "CREATE FUNCTION x"
add field "age"
remove field "name"
run sql "DROP FUNCTION x"

由于Django无法完全优化两个run sql块之间的代码,因此预计add field "name"remove field "name"不会被优化。但是,我知道这两个SQL运行不会影响任何相关性,因此我可以手动删除run sql部分。

手动删除了run sql部分后,有什么办法让Django仅对结果运行优化步骤?

1 个答案:

答案 0 :(得分:1)

我编写了一个命令,该命令使用Django的MigrationOptimizer重写单个迁移文件,专门用于这种情况。我将其发布为要点:

https://gist.github.com/jhillacre/7fa8c182dd821387d4cf1fdb9371dcd7

我已经使用python 3.6在Django 1.11中对此进行了测试。不确定Django 2+是否需要更改。

陷阱包括:

  • 优化器从迁移中删除初始标志。
  • 可互换的依赖关系被扭曲

我总是比较优化的迁移和原始迁移,以确保对initialdependencies的更改被还原。

或者,您可以在使用RunPythonRunSql elidable参数压扁之前删除这些操作。从文档中:

  

可选的elidable参数确定挤压迁移时是否将操作删除(消除)。 link