postgresの実行中のユーザ定義関数(ストアド)を途中で止める

今日うっかり重いユーザ定義関数を走らせてはまったので、重い処理のキャンセル方法を残す。
UNIXで言うとプロセスのkill、windowsで言うとタスクマネージャによるアプリの強制終了みたいなもの。


ここここが参考になる。
というより、それだけ見ればもう十分だが、ここでも一応やったことを残す。


まず、以下のSQLで現在動いているSQLを確認する。

SELECT pg_stat_get_backend_pid(s.backendid) AS procpid,
pg_stat_get_backend_activity(s.backendid) AS current_query
FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;

以下実行例。

次に、確認したprocidを指定して以下のSQLを実行する。

SELECT pg_cancel_backend(確認したprocid);

以下実行例。


最初のSQLを再度実行すれば、停止したかどうか確認できる。
タイトルにはユーザ定義関数と書いたけど、もちろん普通のSQLも同様に中断できる。