🔋

postgresの接続切れをテストで再現する

2023/12/13に公開

背景

PostgreSQLを使ったサービスを運用していて、ちょいちょい接続切れが発生していた。
エラー内容としてはNode.js用のクライアントライブラリである pg が投げているエラーで

Connection terminated unexpectedly というもの。

これをテストで再現したかった。

再現方法

まさにpgのテストで再現されていた。
https://github.com/brianc/node-postgres/blob/6cd0aeb212d1672edd33499b2f4f858cf7ed9a79/packages/pg/test/integration/connection-pool/error-tests.js#L66

同様にクエリ投げてみて再現することが確認できた。

pg_terminate_backend について

pg_cancel_backendとpg_terminate_backendは(それぞれ、SIGINTまたはSIGTERM)シグナルをプロセス識別子で特定されたバックエンドプロセスに送ります。使用中のバックエンドのプロセス識別子はpg_stat_activityビューのprocpid列から、もしくは、(Unixではps、WindowsではTask Managerにより)サーバ上のpostgresプロセスをリストすることで見つけられます。
https://www.postgresql.jp/docs/9.0/functions-admin.html

pg_backend_pid について

現在のセッションに結びついたサーバプロセスのプロセスID
https://www.postgresql.jp/docs/9.0/functions-info.html

Discussion