PostgreSQL Error 57P01: admin_shutdown — причины и восстановление
- Клиенты получают ошибку:
FATAL: terminating connection due to administrator command (SQLSTATE 57P01). - Массовый разрыв сессий пользователей 1С:Предприятие или бэкенд-приложений.
- Сервер штатно закрывает активные процессы и уходит в перезагрузку.
1. Анализ журнала PostgreSQL на предмет источника команды
grep -E "terminating connection due to administrator command|received smart shutdown|received fast shutdown" /var/log/postgresql/*.log2. Поиск вызовов pg_terminate_backend / pg_cancel_backend
Ошибка генерируется, когда администратор или автоматический скрипт принудительно убивает сессию:
SELECT
pid,
usename,
client_addr,
state,
query
FROM pg_stat_activity
WHERE state != 'idle';3. Проверка поведения внешних балансировщиков и пулеров (PgBouncer)
Убедитесь, что пулер не выполняет перезапуск или PAUSE / KILL пула при деплое:
cat /etc/pgbouncer/pgbouncer.ini | grep -E "server_idle_timeout|auth_type"4. Проверка действий Systemd и менеджеров кластера (Patroni / Corosync)
journalctl -u postgresql -u patroni --since "1 hour ago" Частые вопросы (FAQ)
В каких случаях возникает SQLSTATE 57P01?
Код 57P01 генерируется в двух ситуациях: при административной остановке/перезагрузке СУБД (pg_ctl stop, systemctl restart) или при вызове функции pg_terminate_backend(pid).
Является ли ошибка 57P01 признаком аварийного падения сервера?
Нет. 57P01 указывает на контролируемое (graceful) завершение сессии по инициативе администратора или системы управления кластером.
Как предотвратить разрыв сессий в 1С при выполнении регламентных задач?
Используйте мягкую блокировку сеансов через консоль кластера 1С перед проведением обслуживания, не завершая процессы СУБД напрямую.
Как отличить вызов pg_terminate_backend от остановки всей службы?
При остановке службы в логе postgresql появится сообщение 'database system is shut down', а при вызове функции — только завершение конкретного PID.