pg_cancel_backend と pg_terminate_backend の使い方

暴走した問い合わせを止める

書き方

SELECT pg_cancel_backend(pid);
SELECT pg_terminate_backend(pid);
ALTER SYSTEM SET idle_in_transaction_session_timeout = '10min';

pg_cancel_backend は今の問い合わせだけを取り消します(接続は残ります。何も実行していない接続には効きません)。pg_terminate_backend は接続ごと切ります(トランザクションは ROLLBACK されます)。idle_in_transaction_session_timeout を決めておくと、トランザクションの途中で止まった接続を自動で切ります(効くのは決めたあとに止まった接続です。いま止まっている接続は、読み直しても切られないので手で切ります)。

例

SELECT pg_cancel_backend(5103);
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE state = 'idle in transaction';

実際に打って練習する

PostgreSQL DBA コースの Lv45「止める cancel と terminate」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。

すべてのレベルが、プラチナ以上のプランで遊べます。

PostgreSQL の管理コマンド一覧(DBA)へ戻る