2016-04-09 9 views
6

移行では、データベース内の現在のデータを維持しながら、あるデータベーススキーマから別のデータベーススキーマへの変換が可能です。 Djangoは、コマンドpython manage.py makemigrationsdjango 1.9以降で連続したデータベース移行をマージするには?

たびmakemigrationsを使用して移行を作成することができますすることは000n..models.pyファイルで検出された変化に基づいて追加された新しい移行ファイルを実行しています。

時々、models.pyを少し変更した後、私はmakemigrationsを実行したいが、以前のマイグレーションはまだ使用されていないので、新しいマイグレーションを作成したくないデータベース内に大量のデータがある場合、プロダクション環境での各マイグレーションには多くの時間がかかるため、移行前にマージすることをお勧めします。

新しい移行000n ..は、既存の移行000(N-1)..と合併することを可能にする方法はありますか?

答えて

8

あなたが探しているコマンドはsquashmigrationsです。それは、特定のアプリケーションのすべての未適用の移行を1つのファイルにマージします。

1

私はmakemigrationsを実行したいが、以前のマイグレーションが

まだ使用されていないので、これは問題ではありません新しい移行が作成 にしたくない、Djangoは上からの移行を実行しますつまり、最新の移行ファイルは、他の以前の移行ファイルが実行されるまで待機します。

ため

はどのくらいのデータをデータベースに持っているか、データベース内のデータがたくさんあるとき、生産の各移行に時間 の多くを取ることができます実行していますか?本当に多くの場合は、すでにレプリケーションと冗長なDBサーバーが必要です。この場合、読取りと書込みをスレーブ・サーバーなどの1つに切り替えて、マスターでマイグレーションを実行します。トラフィックをマスターに戻してから、それらの間の遅延が0で、新しいスキーマがそれらの間で正しく複製されることを確認してください。

+1

私は質問をあまりうまく枠組みしませんでした。私は移行が順番に適用されることを知っています。私が言いたいことは、2つの移行がまだ適用されていない場合、それらを順番に実行するのではなく、手作業で一緒に結合して適用する利点があるかもしれないということでした。この答えの2番目の部分は面白いです! –

関連する問題