概要
Flask-Migrateを使用してflask db upgrade
を実行した際に下記のコンソール出力がされたまま処理が詰まってしまった場合の解決方法を説明します。
この状況だとCtrl+Cで処理を抜けることもできず、ターミナルを閉じてもDBスキーマの変更は反映されないままです。
$ flask db upgrade
INFO [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO [alembic.runtime.migration] Will assume transactional DDL.
INFO [alembic.runtime.migration] Running upgrade 576e5f4a0fe7 -> 2b28fe44cc94, empty message
原因は、おそらく処理が詰まっていることなので原因となるプロセスを強制終了します。
だいたい同じですが4パターン解決方法を紹介します。2~4については未検証なので、もしかしたら解決できないかもしれないです。
方法1(ターミナルからプロセスを強制終了する)
ターミナル上で該当のプロセスを強制終了します。
ps
コマンドを実行すると実行中のプロセス一覧が表示されるので、その中から該当のプロセスを見つけkill
コマンドで強制終了することができます。
## postgresが実行しているプロセスを調べる
ps aux | grep postgres
## 該当のプロセスを終了する
kill <<プロセスID>> # ex) kill 12345
方法2(PostgreSQLからプロセスを終了する)
postgres上で行います。
この方法だとプロセスを終了できない場合があります。
## ロックされている処理を調べます
SELECT * FROM pg_locks; # pidのカラムにある数字がプロセスIDです
## プロセスを終了します
SELECT pg_cancel_backend(プロセスID);
方法3(postgresqlを再起動する)
※未検証
postgresqlを再起動すればプロセスも終了されるはず。
方法4(端末を再起動する)
※未検証
方法3とほぼ同じです。端末自体を再起動すればプロセスも終了されるはずです。