はじめに
毎回のように遭遇するので備忘録として記しています。
環境
- DB : PostgreSQL 15
- ツール:pgAdmin 4
事象
Postgresのデータベースを削除しようとした際に、以下エラーが発生し削除できませんでした。
Error: database 'XXXX' is being accessed by other users
DETAIL: There are 3 other sessions using the database.
対処法
調べてみるとDB接続中の他のセッションがいるため削除できない事によるエラーでした。
心あたりはないものの、まず以下コマンドでDBの接続状況を確認します。
select * from pg_stat_activity where datname = 'データベース名';
結果はこんな感じで表示されます(表示項目は一部抜粋したもの)
pid | user_name | application_name | client_addr | ~ | |
---|---|---|---|---|---|
1 | 16414 | postgres | pgAdmin4 -DB :XXXX | 10.51.16.0 | |
2 | 16415 | postgres | pgAdmin4 -CONN:6817249 | 10.51.16.0 | |
3 | 16399 | postgres | pgAdmin4 -DB :XXXX | 10.68.51.0 |
- pid integer
- バックエンドのプロセスID。後に実行するセッションの切断コマンドで利用します。
- user_name
- 接続しているユーザ名
- application_name text
- 接続しているアプリケーション名
- client_addr inet
- 接続しているクライアントのIPアドレス
※その他の表示項目については公式ドキュメントを参照ください
結果を確認すると、現在接続中のクライアント(10.51.16.0)2つと以前接続した別の開発マシン(10.68.51.0)のセッションが残っていたようでした。
次に接続を強制切断するコマンドを実行(pidは上記で確認したpidを設定)
SELECT pg_terminate_backend(pid);
自身が接続中のコネクション以外を切断します。
自身のpidはpg_backend_pid () ;で得ることができます。