Ошибка PostgreSQL 08004 sqlserver_rejected: отклонение подключения СУБД
Сервер СУБД отвергает попытку подключения нового сеанса:
FATAL: remaining connection slots are reserved for non-replication superuser connections
-- либо:
FATAL: sorry, too many clients already
-- либо:
FATAL: pg_hba.conf rejects connection for host "192.168.1.100", user "usr1cv8", database "ib_db"
SQLSTATE: 08004 1. Исправление ошибки пула соединений (Too many clients)
Увеличьте параметр max_connections в файле postgresql.conf:
# Рекомендуемое значение для серверов 1С (от 300 до 1000 в зависимости от числа сессий)
max_connections = 500
# Зарезервированные слоты под суперпользователя для аварийного входа
superuser_reserved_connections = 5Перезапустите PostgreSQL:
systemctl restart postgresql2. Корректировка правил доступа в pg_hba.conf
Если отказ вызван отсутствием записи в pg_hba.conf, добавьте разрешающую строку в конец файла:
# TYPE DATABASE USER ADDRESS METHOD
host ib_db usr1cv8 192.168.1.0/24 scram-sha-256
# Либо для всех баз и хостов локальной сети:
host all all 192.168.0.0/16 scram-sha-256Примените настройки без перезапуска СУБД:
SELECT pg_reload_conf();3. Диагностика активных соединений
SELECT count(*), state, usename, client_addr
FROM pg_stat_activity
GROUP BY state, usename, client_addr;4. Внедрение пулера соединений (PgBouncer)
При большом числе пользователей 1С (>300) используйте пул соединений PgBouncer в режиме pool_mode = session или transaction.
Частые вопросы (FAQ)
Почему простое увеличение max_connections до 5000 может ухудшить производительность?
Каждое активное соединение в PostgreSQL использует отдельный процесс операционной системы и потребляет ресурсы CPU на поддержание разделяемой памяти и блокировок. Слишком большое число процессов приводит к деградации планировщика ядра ОС (context switching).
Как применить изменения в pg_hba.conf без отключения активных пользователей?
Выполните в psql команду SELECT pg_reload_conf(); или в терминале Linux: pg_ctl reload / systemctl reload postgresql.
Что делать, если база не пускает даже админа из-за исчерпания подключений?
Подключитесь локально на сервере под пользователем postgres через UNIX-сокет. Параметр superuser_reserved_connections гарантирует доступ суперпользователю даже при 100% заполнении обычного пула.
Почему в 1С при 50 пользователях в базе может быть 300+ соединений к PostgreSQL?
Кластер серверов 1С использует внутренний пул рабочих процессов rphost, каждый из которых открывает параллельные фоновые соединения для служебных потоков, регламентных заданий и раздельных сеансов.