优化Django中的压缩迁移

问题描述 投票:0回答:1

我创建了一个类似于此的压缩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只运行结果的优化步骤?

django django-migrations
1个回答
1
投票

我写了一个命令,它使用Django的MigrationOptimizer来重写单个迁移文件,特别是针对这种情况。我把它作为一个要点发布在这里:

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

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

陷阱包括:

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

我总是对优化的迁移和原始迁移进行区分,以确保恢复有关initialdependencies的更改。

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

可选的elidable参数确定在压缩迁移时是否删除(省略)操作。 link

© www.soinside.com 2019 - 2024. All rights reserved.