使用新的初始迁移来压缩迁移

Using a fresh initial migration to squash migrations

我有一个包含 35 个迁移的应用,需要一段时间 运行(例如在测试之前),所以我想压缩它们。

squashmigrations命令将操作次数从 99 次减少到 88 次,但仍远未达到最佳状态。这可能是因为我有多个 RunPython 操作阻止 Django 优化其他操作。所有这些 RunPython 操作在压缩迁移中都是无用的,因为数据库是空的。在 Django 1.10 中,elidable 参数将允许在这种情况下跳过它们,但仍然存在很多混乱。

我对压缩迁移的想法更接近于 Django 生成的初始迁移,因此我的问题是:

是否建议使用新的初始迁移作为一长串迁移的压缩版本?你会怎么做?

如果您的测试或生产数据库中没有任何重要数据,您可以使用全新的初始迁移,这将是合适的解决方案。

这个技巧我用过很多次,对我很管用。

一些想法:

  • 有时,您需要首先为您的一个本地应用程序创建迁移,然后为所有其他应用程序创建迁移;

  • 为了确保一切正常,您可以在 运行 ./migrate 使用空数据库之前提交您的迁移并备份您的数据库。

注意: 要加快测试速度,您可以尝试 运行 在内存测试中 and/or 运行 如果可能的话使用 sqlite 进行测试.