我创建了一个类似于以下内容的压缩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只对结果运行优化步骤?
发布于 2019-04-18 20:16:03
我编写了一个命令,它使用Django的MigrationOptimizer重写单个迁移文件,特别是针对这个场景。我把它作为要点贴在这里:
https://gist.github.com/jhillacre/7fa8c182dd821387d4cf1fdb9371dcd7
我已经使用python3.6在Django 1.11中测试了这一点。不确定Django 2+是否需要更改。
这些问题包括:
我总是区分优化的迁移和原始的迁移,以确保有关initial和dependencies的更改被恢复。
或者,您可以在使用RunPython或RunSql elidable参数压缩之前删除这些操作。从医生那里:
可选的可撤销参数确定在压缩迁移时是否会删除(省略)操作。链接
https://stackoverflow.com/questions/55028301
复制相似问题