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」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。
すべてのレベルが、プラチナ以上のプランで遊べます。