2017-04-19 4 views
2

私は約7KK行のPostgres 9.5にテーブルを持っています。 Djangoのバージョンは1.10.5です。データベースとアプリケーションは、1つのローカルネットワーク内にあるUbuntu 16.04.2とは異なるサーバーです。Djangoは巨大な移行を適用するとハングします

Djangoのgunicornサーバーが停止しているため、他の操作は実行されていません。私はそこに一つのフィールドを追加するつもりです:

migrations.AlterField(
      model_name='balanceentry', 
      name='reason', 
      field=models.CharField(
       choices=[(b'default', b'Default'), (b'referral', b'Referral'), (b'referrer', b'Referrer'), 
         (b'random', b'Random'), (b'android_offer', b'Android Offer'), (b'ios_offer', b'iOS Offer'), 
         (b'offerwall', b'Offerwall'), (b'withdrawal', b'Withdrawal')], 
       default=b'default', db_index=True, max_length=32), 
     ), 

をそして私は、それを適用しています:

$ ./manage.py migrate users 0026_auto_20170419_1758 
Operations to perform: 
    Target specific migration: 0026_auto_20170419_1758, from users 
Running migrations: 
    Applying users.0026_auto_20170419_1758... 

をそしてpg_topではPostgresを監視します。それは、約15分間ALTERをやっている

は、その後、私はこれを参照してください。

34567 postgres 20 0 401M 39M sleep 2:17 0.10% 0.00% postgres: *** *** ip(45200) idle in transaction 

これは(バックのみWCPUは約0.1%、0%から変化していると)約10分間は変更されません。

./manage.py migrate ...はステータスがまったく変更されず、変更なしで「実行中」のままです(約2時間待っています)。このレコードは消えます(これはクライアントが接続されていないことを意味します)。

postgresサービスを再起動しようとしましたが、これを実行するとトランザクションがロールバックされてディスクスペースが解放されますが、移行コマンドはまだハングします。それはCtrl-Cで反応することさえない、私は-9でそれを殺すことができる。

また、試行ごとに約1〜2 GBの空きディスク容量がなくなっていることに気付きました。

この問題を解決するにはどうすればよいですか?

答えて

1

評判があまりにも低いのでコメントできませんので、回答にする必要があります。

私には解決策がありませんが、回避策があります。 python manage.py sqlmigrateと入力すると、実行するSQLが表示され、手動でデータベースに向かって実行されます。これが成功する場合は、データベーステーブルdjango_migrationsにマイグレーションのマイグレーション名とアプリを追加する必要があります。

これがうまくいくかどうかはわかりませんが、SQL文のエラーを特定し、それを少し最適化することができます。

+0

私はちょうどこのような解決策について考えました:)ありがとう、私は試してみます。 – arts777

+0

うん、それは助けた。ありがとう! – arts777

関連する問題