Ошибки

PostgreSQL: FATAL: sorry, too many clients already

Все места для подключений к базе заняты. Сколько их, задаёт настройка max_connections, по умолчанию — 100, если позволяют настройки системы. Места занимает сайт или программа, которая открывает подключения и не закрывает их. Найдите, кто занял места, и освободите их.

≈ 5 мин чтения3 шага
Содержание 10

Как выглядит ошибка

FATAL:  sorry, too many clients already

Похожее сообщение:

FATAL:  remaining connection slots are reserved for roles with the SUPERUSER attribute

Оно значит, что свободных мест для обычных пользователей не осталось. Несколько последних мест база держит для суперпользователей, по умолчанию — 3. Поэтому администратор postgres ещё может войти и разобраться.

Шаг 1. Войдите администратором

Команды вводятся на сервере с базой: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.

sudo -u postgres psql

Команда открывает psql — программу для работы с базой — от имени администратора базы postgres. Если система спросит пароль, введите пароль своего пользователя на сервере, а не пароль базы. Символы при вводе не видны — наберите пароль и нажмите Enter. Строка ввода сменится на postgres=#: теперь можно вводить команды для базы. Каждая команда SQL заканчивается точкой с запятой. Выйти — \q.

Если вход не проходит с той же ошибкой, заняты и запасные места — освободите их перезапуском.

Шаг 2. Посмотрите, кто занял подключения

Сколько всего мест:

SHOW max_connections;

Кто их занял — запрос сгруппирует подключения по пользователю, базе и состоянию:

SELECT usename, datname, state, count(*)
FROM pg_stat_activity
WHERE backend_type = 'client backend'
GROUP BY usename, datname, state
ORDER BY count(*) DESC;

Строка backend_type = 'client backend' оставляет только подключения программ и людей, без служебных процессов базы. Что значит состояние в столбце state:

СостояниеЧто значит
activeподключение выполняет запрос
idleподключение открыто и ждёт новой команды
idle in transactionвнутри начатой транзакции, но запрос сейчас не выполняется

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

Шаг 3. Освободите подключения

Перезапустите программу, которая заняла места: при перезапуске она закроет свои подключения. Для сайта на PHP перезапустите PHP-FPM, в Ubuntu 26.04 — php8.5-fpm:

sudo systemctl restart php8.3-fpm

Если программу перезапускать нельзя, завершите её простаивающие подключения прямо из базы. Вместо ivan — пользователь из шага 2:

SELECT pg_terminate_backend(pid) FROM pg_stat_activity
WHERE usename = 'ivan' AND state = 'idle';

Запрос завершит только подключения в состоянии idle — те, что сейчас ничего не делают. Если они быстро набираются снова, причина в программе: ищите в её настройках число подключений к базе.

Если администратор тоже не входит

Перезапустите PostgreSQL — все подключения закроются. На время перезапуска сайт не сможет работать с базой.

sudo systemctl restart postgresql

Сразу после перезапуска войдите администратором и выполните шаг 2, пока места снова не заняты.

Нужно ли поднимать max_connections

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

Посмотрите текущую строку в файле настроек:

grep '^max_connections' /etc/postgresql/16/main/postgresql.conf

Откройте файл в редакторе nano командой sudo nano /etc/postgresql/16/main/postgresql.conf, найдите строку, которая начинается с max_connections, и поменяйте число. Сохраните файл: Ctrl+O, Enter, выход — Ctrl+X. Настройка применяется только при перезапуске:

sudo systemctl restart postgresql

Проверьте командой SHOW max_connections; из sudo -u postgres psql. В примерах — PostgreSQL 16 из Ubuntu 24.04. В Ubuntu 26.04 ставится PostgreSQL 18: в путях и командах вместо 16 подставьте 18.

Если ошибка too many connections for role

FATAL:  too many connections for role "ivan"

У пользователя базы свой предел подключений, его задают словами CONNECTION LIMIT. Поднимите предел или снимите его: -1 — без ограничения.

ALTER ROLE ivan CONNECTION LIMIT -1;

Похожая ошибка too many connections for database "shop" — предел у самой базы. Снимается так же:

ALTER DATABASE shop CONNECTION LIMIT -1;

Если предел поставили намеренно, лучше найти, кто держит подключения, — шаг 2.

Ошибки рядом

Что видитеЧто делать
connection to server at … failed: Connection refusedбаза не принимает подключения
FATAL: password authentication failed for userне подошёл пароль
FATAL: role "ivan" does not existтакого пользователя в базе нет

Источники

Сверено 14 октября 2026 года.

Что почитать дальше