PostgreSQLの接続上限エラー対処法

冒頭まとめ PostgreSQLへの接続時に次のエラーが出る場合、利用できる接続枠がすべて使われています。 FATAL: sorry, too many clients already まず、接続済みの管理用セッションがあればpg_stat_activityで内訳を確認します。不要な接続を安全に終了し、アプリケーションが接続を閉じているか、複数の接続プールの上限が大きすぎないかを調べてください。 max_connectionsを上げるだけでは、接続の増え続ける原因は解消しません。この設定の変更にはPostgreSQLの再起動が必要で、値を増やすと共有メモリを含む資源の割り当ても増えます。先に接続の使い方を直し、それでも必要な場合に限って上限を見直します。 sorry, too many clients alreadyの意味 PostgreSQLは、同時に受け付ける接続数をmax_connectionsで制限しています。利用可能な接続枠を使い切ると、新しい接続を受け付けられず、sorry, too many clients alreadyを返します。 このエラーのSQLSTATEは53300、条件名はtoo_many_connectionsです。アプリケーションでエラーを判定するときは、表示文ではなくSQLSTATEを使うと、言語設定や文言の違いに影響されにくくなります。PostgreSQL公式のエラーコード一覧でも確認できます。 PostgreSQL本体では、接続処理に必要な領域を確保できなかったときに、このエラーを返します。処理はPostgreSQL本体のproc.cで確認できます。 似た2つのエラーとの違い 接続枠が少なくなった段階では、別の文言が表示されることがあります。 FATAL: remaining connection slots are reserved for roles with the SUPERUSER attribute この場合は接続枠が完全になくなったわけではなく、残りがスーパーユーザー用に確保されています。スーパーユーザーで管理用接続を確立し、接続状況を調査できる可能性があります。 環境によっては、次の文言が表示されます。 FATAL: remaining connection slots are reserved for roles with privileges of the "pg_use_reserved_connections" role これは、残りがpg_use_reserved_connectionsの権限を持つ役割とスーパーユーザー向けに確保されている状態です。 一方、sorry, too many clients alreadyまで進むと、接続処理に使える枠自体が残っていません。予約された権限を持つ利用者でも、新しい接続に失敗する可能性があります。予約枠の判定と文言はPostgreSQL本体のpostinit.cで確認できます。 接続数と設定値を確認する まだ利用できる管理用接続や既存の管理画面がある場合は、最初に現在値を確認します。 SHOW max_connections; SHOW superuser_reserved_connections; reserved_connectionsに対応する環境では、次の値も確認してください。未対応の版では設定項目が存在しないため、エラーになります。 SHOW reserved_connections; 現在のクライアント接続数は、次のSQLで確認できます。 SELECT count(*) AS client_connections FROM pg_stat_activity WHERE backend_type = 'client backend'; pg_stat_activityにはサーバープロセスごとの状態が表示されます。PostgreSQL公式文書にも、現在の状態や問い合わせを確認する統計ビューとして説明されています。pg_stat_activityの公式資料 ...

2026年9月19日 · ErrorLog