2016-04-09 23 views
6

Geçişler, veritabanındaki geçerli verileri korurken bir veritabanı şemasından diğerine dönüştürmeye izin verir. Django komutunu python manage.py makemigrationsDjango 1.9 + 'da ardışık veritabanı geçişleri nasıl birleştirilir?

Her zaman makemigrations kullanarak, taşıma oluşturmasına olanak sağlar 000n..models.py dosyası tespit değişikliklere göre eklenen yeni bir göç dosyası çalıştırılır.

Bazen, models.py dosyasında küçük değişiklikler yaptıktan sonra, makemigrations çalıştırmak istiyorum, ancak önceki geçişler henüz kullanılmadığı için yeni bir geçişin oluşturulmasını istemiyor. Veritabanında çok fazla veri olduğunda üretimdeki her geçiş çok zaman alabilmektedir; bu nedenle, elden önce geçişleri birleştirmek tercih edilebilir.

yeni göç 000n .. varolan göç 000 (n-1) .. ile birleşmesi için izin vermek için bir yolu var mı?

cevap

8

Aradığınız komut squashmigrations. Belirli bir uygulamanın uygulanmayan tüm geçişlerini tek bir dosyada birleştirir.

1

Ben makemigrations çalıştırmak istiyorum ama önceki göçler

henüz kullanılmamış çünkü bu bir sorun değildir, yeni bir göç yarattı olmak istemiyoruz, Django yukarıdan göçler çalıştırır bottom, Anlamı: En son geçiş dosyanız, önceki önceki geçiş dosyalarının çalıştırılmasına kadar bekleyecektir.

çünkü

ne kadar veri veritabanında var veritabanındaki çok fazla veri olduğunda üretimde her göç zamanında çok alabilir çalıştıran? Gerçekten çok, o zaman zaten çoğaltmaları ve yedekli db sunucularına sahip olmalısınız. Bu durumda, okuyucuyu yazın ve bir slave sunucusuna yazarak, master'daki geçişleri çalıştırın. ve sonra trafiği master'a geri döndürün, ve ondan önce aralarındaki gecikmenin 0 olduğundan ve yeni şemanın düzgün bir şekilde çoğaltıldığından emin olun.

+1

Soruyu o kadar iyi çerçevelemedim (şimdi yeniden yazdım). Göçlerin sırayla uygulandığını biliyorum. Söylemeye çalıştığım şey şu ki, eğer 2 göçme henüz uygulanmamışsa, onları bir araya getirmeden önce birbiri ardına çalıştırmak yerine, onları bir araya getirme ve daha sonra uygulamak için bazı avantajlar olabilir. Bu cevabın 2. kısmı ilginç! –