![[PostgreSQL]PostgreSQL のサーバー側で特定のDBのセッションを切断する方法](https://www.bamboo.tk/wp-content/postgresql_icon_eyecatch-922x1024-922x1024.png)
サーバー側でクエリの実行を中断するには SIGINT を当該プロセス( ps や pg_stat_activity から探す)に送ります(kill -INT PID)が、これではセッションは切断されません。メンテナンスなどで切断して欲しい場合には pg_terminate_backend(procpid) を使います。
特定のDBのセッションをすべてを強制的に切断するには以下のSQLで切断可能です。
PostgreSQL 9.2
SELECT pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE datname = 'DB名'
AND procpid <> pg_backend_pid() -- 自分自身を切断しないように
;
PostgreSQL 9.3 からは procpid ではなく pid に変わっているようなので、以下の手順で切断可能です。
PostgreSQL 9.3以降
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'DB名' AND pid <> pg_backend_pid();
特定のユーザーなら usename で絞ります。
PostgreSQL 9.2
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE usename = 'ユーザ名' AND procpid <> pg_backend_pid() -- 自分自身を切断しないように ;
PostgreSQL 9.3以降
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE usename = 'ユーザ名' AND pid <> pg_backend_pid();
切断後に再接続されたくない場合は pg_hba.conf で reject するようにしておきましょう。