PostgreSQL

PostgreSQL のサーバー側でセッションを切断する方法

More than 3 years have passed since last update.

サーバー側でクエリの実行を中断するには SIGINT を当該プロセス( pspg_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 するようにしておきましょう。