postgres へのクライアントからの接続を強制切断する ruby スクリプト
DB に postgres を使って rails の開発をおこなっていて、スキーマを大幅変更、面倒なので db を一旦削除して再作成ってときがある。
しかし、
% rake db:drop
とやって db を削除しようとしても、
Couldn't drop test_development : #<ActiveRecord::StatementInvalid: RuntimeError: ERROR C55006 Mdatabase "test_development" is being accessed by other users Fdbcommands.c L674 Rdropdb: DROP DATABASE IF EXISTS "test_development">
というエラーが表示されてできないときがある。
pgAdmin3 のような GUI ツールから db の操作をおこなっているとこれが確実に起きる。pgAdmin3 のようなクライアントからの接続が残っている限り、postgres では db を削除できないようだ。
でも、開発環境ではいちいち pgAdmin3 を閉じたりなどして接続を切るのも面倒。
そこで、ちょっと乱暴だが、postgres へのクライアントからの接続を強制切断する ruby スクリプトを書いてみた。
postgres への接続プロセスの pid を調べ、sudo kill -9 しているだけ。
もし使う場合は、各環境に応じて変更して自己責任でお使いください。
2009/01/30 00:24:20