Архив метки: PostgreSQL

PostgreSQL 1C для Windows при запуске останавливается

С ошибкой вида «Служба была запущена и автоматически остановлена»
Отмазка/Disclaimer: всё что вы делаете, вы делаете на свой страх и риск. Нникакойтветственности за результат я не несу.

Причина, в 99% случаев: некорректное завершение работы.
Не экономьте на ИБП, и мониторинге. Следите за состоянием батареи ИБП.
Реже — причина сбой диска. Развитая инфраструктура без мониторинга — бомба замедленного действия. Следите за состоянием серверов.
В любом случае, PostgreSQL очень надёжен, и постарается сделать всё, чтобы баз не сломались и данные не потерялись, но может быть всякое. По этому, в большинстве случаев, служба не остановилась, просто запускается слишком долго, и Windows, не получив ответа, считает, что что-то пошло не так.

Это надо проверить.

  1. Запустите диспетчер задач, и убедитесь, что процессы postgresql.exe запущены
  2. Если видите процессы, PostgreSQL либо в процессе старта, либо уже работает. Проверяйте логи (логи лежат в рабочем каталоге кластера, в папке log). Где рабочий каталог кластера, можно посмотреть в свойствах службы, параметр в конце строки запуска.
  3. Отсортируйте файлы логов по дате, и откройте последний. 99% вы увидите там
  4. Дождитесь пока PostgreSQL не перестанет сыпать строками вида:
    FATAL: the database system is starting up
    DETAIL: Consistent recovery state has not been yet reached
    FATAL: the database system is not yet accepting connections

    Скорее всего, лог перестанет часто обновляться, после того, как закончится autovacuum, после проверки целостности. Как-то так

Это значит — сервер запустился, и можно войти в базу 1С

Теперь осталось только перезапустить PostgreSQL так, чтобы работал pg_ctl и Windows считала, что служба работает.

Обратите внимание: если сервер не придёт в рабочее состояние, и история в логе не изменится, дальше ничего делать нельзя. Всё плохо, идите восстанавливаться из бэкапа.

Если заработало, можно перезапустить PostgreSQL:

  • Запустите командную строку «от имени администратора»
  • В командной строке перейдите в каталог PostgreSQL ((как правило C:\Program Files\PostgreSQL\%номер_версии%\bin)
  • Выполните команду: pg_ctl stop -D %путь_к_рабочему_каталогу_кластера% -m fast -W
    //Обратите внимание, в пути к рабочему каталогу кластера все обратные слэши меняются на прямые. т.е., вместо F:\PGDATA пишем F:/PGDATA
  • Дождитесь, пока команда отработает, выдохните ещё полминуты
  • Перейдите в оснастку «Службы» и запустите PostgreSQL. Если с данными всё хорошо, служба нормально запустится, и всё заработает.