Ошибка: cлишком много клиентов psql

В php пример этой выглядит как следующее сообщение:

PDOException: SQLSTATE[08006] [7] connection to server at «127.0.0.1», port 5433 failed: извините, уже слишком много клиентов connection to server at «127.0.01», port 5433 failed: ВАЖНО: извините, уже слишком много клиентов в функции Drupal\ClassResolver::resolve() (строка 29 в файле …).

У вас это может быть какая то другая точка в коде, с PHP проблема не связана.

Эта ошибка означает, что ваш сайт/приложение не может подключиться к базе данных PostgreSQL, так как превышен лимит одновременных подключений. Сообщение «извините, уже слишком много клиентов» — это прямой перевод ошибки PostgreSQL FATAL: sorry, too many clients already.

Основной источник проблемы — это т.н. зависшие соединения, т.е. idle или idle in transaction.

Их список можно посмотреть следующим запросом:

Сами по себе idle соединения — не являются чем то плохим. Это открытые соединения с базой данных, которые открывает приложение на момент запроса / сайт при инициализации скриптов, подключаясь к базе данных. Они должны закрываться PHP автоматически (в других языках это может быть реализовано иначе).

Если они висят в таком состоянии в течении периода времени больше адекватного значения, например 15 мин, то вероятно это idle состояние является подвисшим процессом и штатно не было завершено.

Когда их количество достигает максимально разрешенного в конфигурации postgres, то сервер отказывает принимать новые соединения.

Действующий лимит можно посмотреть следующим образом:

Типовое значение — 100. Это не очень много, может быть и 1000 и более. Но если у вас не хватает кол-ва соединений (превышается лимит), высоконагруженное приложение, то обычно создают кластер из серверов баз данных, распределяя соединения в этом пуле.

Что делать с подвисшими соединениями?

Можно попробовать их завершить принудительно:

Так вы закроете все idle соединения, которые открыты более чем 15 минут назад.

Другой вариант: увеличить число max_connections.

Или установив в конфиг файле — postgresql.conf

И обязательно сделать сделать перезапуск демона для актуализации настоек. У настроек разный приоритет, который следует учитывать.

Для мониторинга может быть полезным собрать информацию о лимитах и типах соединений одним запросом:

Мало букафф? Читайте есчо !

Как узнать количество строк в PostgreSQL без COUNT(*)

Июль 27, 2026 г.

В повседневной работе с PostgreSQL иной раз возникает задача оценить или узнать точное число строк в таблице. Классический способ — SELECT COUNT(*) FROM table — работает, но для больших таблиц он может быть медленным, поскольку выполняет полное сканирование ...

Читать

Команды консоли PostgreSql

Апрель 18, 2017 г.

Небольшая шпаргалка по работе в консоли postgreSQL. Чтобы полноценно работать с консолью, лучше всего переключиться на супер-юзера базы данных. ...

Читать

Экспорт данных из PostgreSQL в MySQL

Март 19, 2017 г.

Можно действовать разными способами, в зависимости от ситуации. Мне требовалось вытащить данные из проекта на Python/Django/PostgreSQL, чтобы потом экспортировать ...

Читать

Перенос базы PostgreSQL с сервера на сервер

Январь 24, 2017 г.

Не простая операция,  если вы не имели опыта настройки / работы с postgresql до сих пор. Расскажу поэтапно как выгрузить дамп базы, и как затем этот дамп ...

Читать
 

Комментарии к «Ошибка: cлишком много клиентов psql»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: