Что это значит

База дошла до лимита max_connections и отказывает новым сессиям. Сервисы RX получают отказ при подключении, пользователи видят ошибки при открытии и сохранении. Вариант той же ситуации: remaining connection slots are reserved for roles with the SUPERUSER attribute. Обычные места заняты, остались только резервные для администратора.

Причин обычно три. Лимит остался по умолчанию (100), а сервисов и экземпляров много. Сессии висят в состоянии idle in transaction и не освобождаются. Сервис после сбоя переподключается в цикле и плодит соединения.

Как проверить

Подключитесь под суперпользователем, для него места оставлены:

select count(*), state, application_name
from pg_stat_activity
where backend_type = 'client backend'
group by 2, 3 order by 1 desc;

Много строк idle in transaction означает, что соединения держит приложение. Много idle от одного сервиса означает слишком большой пул или утечку.

Что сделать

  1. Сейчас: завершить зависшие сессии через select pg_terminate_backend(pid) для тех, кто простаивает в транзакции дольше получаса.
  2. Поставить idle_in_transaction_session_timeout, например 25 минут, чтобы такие сессии закрывались сами.
  3. Поднять max_connections с оглядкой на память: каждое соединение стоит около 10 МБ плюс work_mem. Изменение требует перезапуска базы.
  4. Если нужно больше 600 соединений, ставить перед базой пул (PgBouncer) вместо дальнейшего роста лимита.

Подобрать max_connections и work_mem под ваш сервер поможет калькулятор настроек PostgreSQL.