Превышен лимит подключения php postgresql для не суперпользователей - PullRequest
3 голосов
/ 03 февраля 2012

У меня есть приложение php с бэкэндом postgresql, использующее PDO для взаимодействия с базой данных. Он работал и работал в течение нескольких месяцев без проблем, но сегодня вечером внезапно я получаю постоянную ошибку 500 при загрузках страницы, которые требуют подключения к базе данных, и файл error.log для сервера показывает это:

PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[08006] 
[7] FATAL:  connection limit exceeded for non-superusers'

Пользователь, который подключается к базе данных, имеет значение rollconnlimit -1, поэтому это не должно быть проблемой. Когда я запрашиваю таблицу pg_stat_activity, я не вижу никаких соединений.

Есть идеи, что может быть причиной этого? Я не изменил код, который привел бы к большему или меньшему количеству соединений с базой данных.

Я рад опубликовать некоторый код, но не уверен, какие части моего кода опубликовать без руководства о том, что может быть причиной проблемы.

1 Ответ

3 голосов
/ 04 февраля 2012

Непосредственной причиной ошибки Postgres, вероятно, является установка max_connections.

Но то, что я прочитал в вашем комментарии, вы должны исправить , что . Переход к БД для каждой отдельной записи и последующий локальный цикл в приложении - это наихудший сценарий.

Извлечение всех строк одновременно и их обработка в приложении намного лучше, но все же не очень хорошо. Насколько это возможно, вы должны иметь обработчик данных базы данных и получать только те результаты, которые вам нужны в вашем приложении. Вот в чем движки баз данных хороши. Нет необходимости отправлять большое количество данных и использовать только небольшую их часть. Я написал больше здесь .

...