PostgreSQL 57P03: The database system is starting up / shutting down в 1С
Симптомы ошибки 57P03 в связке 1С + PostgreSQL
При попытке пользователей запустить базу 1С клиент выдает ошибку: Ошибка СУБД: FATAL: the database system is starting up (или shutting down), SQLSTATE=57P03. Подключение к серверу СУБД невозможно ни через толстый/тонкий клиент 1С, ни через pgAdmin.
| Статус PostgreSQL | Текст лога | Значение |
|---|---|---|
| starting up | FATAL: the database system is starting up, SQLState: 57P03 | Сервер СУБД проигрывает транзакционные логи WAL после аварийной остановки |
| shutting down | FATAL: the database system is shutting down, SQLState: 57P03 | СУБД останавливается по команде systemctl stop или по сигналу SIGTERM/SIGINT |
| in recovery and not accepting connections | FATAL: the database system is in recovery mode | Реплика находится в режиме Standby или восстанавливается из контрольной точки |
Алгоритм устранения ошибки 57P03
- Главное правило — ПОДОЖДИТЕ (Crash Recovery): если сервер СУБД был выключен некорректно (отключение питания, перезагрузка хоста по BSOD/Kernel Panic), PostgreSQL при старте находится в состоянии
starting up, так как механизм REDO применяет транзакции изpg_wal(pg_xlog). Отслеживайте прогресс в реальном времени:tail -f /var/log/postgresql/postgresql-*.logНи в коем случае не убивайте процесс
kill -9 postgresна этом этапе, иначе база будет разрушена! - Проверьте свободное место на диске с базой: PostgreSQL падает в emergency shutdown, если на разделе
/var/lib/postgresql/осталось 0 байт свободного пространства:df -hT /var/lib/postgresql - Удаление зависшего файла postmaster.pid (только если процесс НЕ запущен): если процесс упал, но оставил lock-файл:
# 1. Проверяем, что процессы postgres ТОЧНО не висят: ps aux | grep postgres # 2. Если процессов нет, удаляем pid-файл: rm /var/lib/postgresql/data/postmaster.pid # 3. Стартуем сервис: systemctl start postgresql-1С - Сброс зависшего журнала транзакций (КРАЙНЯЯ МЕРА): если СУБД не стартует из-за поврежденного WAL-файла:
# Только после создания полной резервной копии каталога data! su - postgres /usr/pgsql-XX/bin/pg_resetwal -f /var/lib/postgresql/data/
Внимание: Использование утилиты pg_resetwal -f очищает незафиксированные транзакции. После ее применения необходимо обязательно выполнить тестирование и исправление базы в конфигураторе 1С.
Частые вопросы (FAQ)
Сколько времени длится состояние 'the database system is starting up'?
Время зависит от объема не сброшенных на диск транзакций и скорости диска (IOPS). Для баз 1С объемом 500 ГБ процедура redo recovery может длиться от 5 минут до часа.
Почему эта ошибка часто возникает на серверах с 1С?
1С генерирует огромный объем мелких транзакций. Если параметры checkpoint_completion_target и max_wal_size настроены неверно, контрольные точки сбрасываются редко, увеличивая объем работы при аварийном старте.
Что означает, если ошибка 57P03 появляется при нормальной работе?
Служба СУБД была принудительно остановлена внешней системой: например, скриптом бэкапа, системой мониторинга или механизмом Linux OOM-Killer из-за нехватки оперативной памяти.
Как предотвратить падение СУБД по вине OOM Killer?
Задайте параметр vm.overcommit_memory = 2 в /etc/sysctl.conf и скорректируйте shared_buffers в postgresql.conf так, чтобы СУБД не потребляла всю RAM.