1. ホーム
  2. postgresql

[解決済み] PostgreSQLデータベースにアクティブな接続がある場合、そのデータベースを削除する方法は?

2022-03-25 14:35:11

質問

PostgreSQLのデータベースを削除するスクリプトを書く必要があります。多くの接続があるかもしれませんが、スクリプトはそれを無視しなければなりません。

標準の DROP DATABASE db_name クエリーは、オープンなコネクションがある場合には機能しません。

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

どのように解決するのですか?

この場合、あなた以外の既存の接続は削除されます。

クエリ pg_stat_activity を実行し、killしたい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 . 参照 このメーリングリストのスレッド .