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