2016-04-09 55 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次遷移尚未得到應用,那麼在將它們合併到一起然後再應用它們,而不是一個接一個地運行它們可能會有一些優勢。這個答案的第二部分很有趣! –