RDSでロックしたPostgreSQLのプロセスを削除する

PostgreSQL

RDSのプロセス削除コマンドはterminateを使う

RDSでPostgreSQLを使用しているのですが、table lockが掛かってしまい、insertやupdateが出来ないという自体が起こりました。
今回はロック対処法を書き記しておきたいと思います。

まず、どのプロセスがロックしているかを確認するSQLを打ちます。

SELECT l.pid, db.datname, c.relname, l.locktype, l.mode
FROM pg_locks l
LEFT JOIN pg_class c ON l.relation=c.relfilenode
LEFT JOIN pg_database db ON l.database = db.oid
ORDER BY l.pid;

次に、ロックが掛かっているプロセスを削除といきたいのですが、RDSではここでハマりました。

SELECT pg_cancel_backend(PID);

本来であれば、上記で行けるはずらしいのですが、RDSではそうは行きません。
pg_cancel_backendをpg_terminate_backendとしないと駄目なんですね。
いやー、ハマった。。

SELECT pg_terminate_backend(PID);

一応、簡単に全プロセス削除というのもメモっておきます。

SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'DB_NAME'
AND pid <> pg_backend_pid();

ポイント

ネット上で調べてると、pg_cancel_backendと出ているのが殆どでハマってしまいました。pg_terminate_backend覚えておきたいところです。

コメントを残す