PostgreSQL「remaining connection slots are reserved for non-replication superuser connections」

データベースに PostgreSQL を使っているアプリケーションが、急に下のエラーメッセージを出して PostgreSQL に接続できなくなった。

remaining connection slots are reserved for non-replication superuser connections

接続が多すぎて上限に達しているのかも。まずは接続数の上限を調べてみる。

SHOW max_connections;

接続数の上限は 100 だった。

現在、何がどれくらいの接続しているのか調べてみる。

SELECT COUNT(*) FROM pg_stat_activity;

セッション数は 98。上限ギリギリ。なぜか、pgAdmin のセッションが半数以上を占めていた。

今回は pgAdmin 閉じてもらうことで事なきを得たけど、強制的に切断したい場合は次の SQL を発行することになりそう。

SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE pid <> pg_backend_pid()
  AND datname = 'DB 名'
  AND application_name LIKE 'pgAdmin%';