2016-04-09 38 views
6

迁移允许从一个数据库模式转换到另一个数据库模式,同时维护数据库中的当前数据。 Django的允许使用命令python manage.py makemigrations如何在django 1.9+中合并连续的数据库迁移?

每次makemigrations创建迁移运行新的迁移文件000n..是基于在models.py文件检测到的变化增加。

有时,在对models.py进行小改动后,我想运行makemigrations,但不希望创建新的迁移,因为之前的迁移尚未使用,因此它们可以合并在一起,主要原因是运行当数据库中存在大量数据时,生产中的每次迁移可能会花费大量时间,因此可能会优先合并迁移。

有没有一种方法可以让一个新的迁移000N ..与现有迁移000(N-1)..合并?

回答

8

您正在查找的命令是squashmigrations。它会将给定应用程序的所有未应用迁移合并到单个文件中。

1

我想运行makemigrations,但不希望新的迁移要创建 因为以前的迁移还没有被使用但

这不是一个问题,Django的运行,从上迁移底部,意思是:您的最新迁移文件将等待直到其他先前的迁移文件运行。

因为运行时没有在数据库

多少数据在数据库中有大量的数据在生产的每一个迁移工作将需要大量的时间 ?如果真的很多,那么你必须已经有复制和冗余数据库服务器。在这种情况下,将读取和写入切换到一个,称为从属服务器,在主服务器上运行迁移。然后将流量切换回主站,并在此之前确保它们之间的延迟为0,并且新架构在其中正确地复制。

+1

我没有很好地解决这个问题(现在重写它)。我知道迁移是按顺序应用的。我想说的是,如果2次迁移尚未得到应用,那么在将它们合并到一起然后再应用它们,而不是一个接一个地运行它们可能会有一些优势。这个答案的第二部分很有趣! –