アクティブな接続がある場合に PostgreSQL データベースを削除するにはどうすればよいでしょうか? 質問する

アクティブな接続がある場合に PostgreSQL データベースを削除するにはどうすればよいでしょうか? 質問する

PostgreSQL データベースを削除するスクリプトを作成する必要があります。データベースへの接続は多数ある可能性がありますが、スクリプトではそれを無視する必要があります。

DROP DATABASE db_name開いている接続がある場合、標準クエリは機能しません。

どうすれば問題を解決できますか?

ベストアンサー1

これにより、あなた以外の既存の接続が切断されます:

pg_stat_activity削除する pid 値を照会して取得し、SELECT pg_terminate_backend(pid int)それらに対して発行します。

PostgreSQL 9.2 以降:

SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB' -- ← change this to your DB
  AND pid <> pg_backend_pid();

PostgreSQL 9.1 以下:

SELECT pg_terminate_backend(pg_stat_activity.procpid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB' -- ← change this to your DB
  AND procpid <> pg_backend_pid();

すべての接続を切断したら、切断して、削除しようとしているデータベースではない別のデータベースからの接続から DROP DATABASE コマンドを発行する必要があります。

procpid列名が に変更されていることに注意してくださいpidこのメーリングリストのスレッド

おすすめ記事