Как исправить ошибку PostgreSQL «could not access file online_analyze» при работе с 1С на Ubuntu?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При администрировании серверов 1С:Предприятие на базе Linux системные администраторы нередко сталкиваются с ситуацией, когда СУБД PostgreSQL внезапно прекращает принимать входящие подключения на порт 5432. При этом проверка состояния через systemd может показывать статус active (exited), однако реальный процесс СУБД завершается аварийно сразу после старта.

В системном журнале PostgreSQL (/var/log/postgresql/postgresql-9.6-main.log) при этом фиксируются следующие строки:


FATAL: could not access file "online_analyze": Нет такого файла или каталога
LOG: database system is shut down

Проанализируем детально, почему возникает данная ошибка, как правильно диагностировать состояние кластера и какими способами можно восстановить работоспособность сервера 1С.

Причины падения службы PostgreSQL

Модуль online_analyze — это специализированное расширение, которое входит в состав сборок PostgreSQL, оптимизированных для работы с платформой «1С:Предприятие» (от компании 1С или Postgres Professional). Данный модуль отвечает за оперативный сбор и актуализацию статистики по временным таблицам, которые платформа 1С активно создает в процессе выполнения запросов.

Выясним основные причины, приводящие к ошибке загрузки библиотеки:

  1. Перезапись пакетов стандартными версиями: При выполнении системного обновления apt upgrade или установке дополнительных утилит из базовых репозиториев Ubuntu/Debian оптимизированные исполняемые файлы и библиотеки PostgreSQL заменяются стандартными сборками, в составе которых файл online_analyze.so отсутствует.
  2. Использование промежуточных (не-LTS) версий ОС: Сборки PostgreSQL для 1С формируются преимущественно под стабильные LTS-релизы (например, Ubuntu 16.04, 18.04, 20.04, 22.04). Если развернуть промежуточный дистрибутив (например, Ubuntu 17.04), скрипты подключения репозитория через команду lsb_release -cs пытаются запросить несуществующую кодовую ветку и возвращают ошибку 404 Not Found. В результате часть пакетов (в частности, расширения) не устанавливается вовсе.
  3. Особенности управления службой в systemd: Сервис postgresql.service в Debian-подобных системах является мета-сервисом. Его статус active (exited) означает лишь то, что управляющий сценарий успешно отработал, но сам экземпляр базы данных при этом может быть остановлен из-за критической ошибки.

Способ 1. Временный запуск СУБД с отключением расширения

Если сервер боевой и требуется срочно возобновить доступ пользователей к базам 1С, выполним временное отключение вызова проблемной библиотеки в конфигурации PostgreSQL.

  1. Откроем конфигурационный файл целевого кластера (путь может отличаться в зависимости от версии): sudo nano /etc/postgresql/9.6/main/postgresql.conf
  2. Найдем параметр shared_preload_libraries. По умолчанию для сборок 1С он имеет вид: shared_preload_libraries = 'online_analyze, plantuner'
  3. Удалим из списка модуль online_analyze (или временно закомментируем всю строку символом #).
  4. Сохраним изменения и запустим конкретный экземпляр службы: sudo systemctl restart postgresql@9.6-main

Важно: Это временная мера. Без модуля online_analyze запросы 1С, использующие сложные временные таблицы, могут выполняться со сниженной производительностью.

Способ 2. Корректная установка пакетов на не-LTS версии Ubuntu

Разберем ситуацию, когда репозиторий выдает ошибку 404 Not Found при попытке обновить или доустановить нужные пакеты. Если используется не-LTS дистрибутив, необходимо явно указать кодовое имя ближайшего LTS-релиза в конфигурации APT.

  1. Откроем файл подключения репозитория: sudo nano /etc/apt/sources.list.d/postgrespro-1c.list
  2. Заменим динамическое определение дистрибутива на поддерживаемую версию (например, xenial для старых сборок или актуальный LTS) и ограничим архитектуру 64-битной системой, чтобы избежать ошибок с 32-битными пакетами i386: deb [arch=amd64] http://1c.postgrespro.ru/deb/ xenial main
  3. Обновим списки пакетов и переустановим серверную часть вместе со всеми расширениями:
    
    sudo apt-get update
    sudo apt-get install --reinstall postgresql-pro-1c-9.6 postgresql-pro-1c-9.6-contrib
    
  4. Проверим наличие скомпилированного файла библиотеки в системе: ls -la /usr/lib/postgresql/9.6/lib/ | grep online_analyze Если файл online_analyze.so присутствует в каталоге, вернем параметр shared_preload_libraries в файле postgresql.conf в исходное состояние и перезапустим СУБД.

Способ 3. Фиксация версий пакетов (APT pinning)

Чтобы в будущем системный менеджер пакетов не заменял адаптированные под 1С библиотеки на ванильные версии из стандартных репозиториев Ubuntu, зафиксируем установленные пакеты от автоматического обновления:

sudo apt-mark hold postgresql-9.6 postgresql-client-9.6 postgresql-contrib-9.6

Для сборок от Postgres Professional команда выглядит аналогично:

sudo apt-mark hold postgresql-pro-1c-9.6 postgresql-pro-1c-9.6-contrib

Диагностика и управление кластерами PostgreSQL

Для контроля работы экземпляров СУБД в среде Linux рекомендуется использовать специализированные утилиты вместо прямого вызова service postgresql status:

  1. Просмотр списка всех кластеров, их статуса и используемых портов: pg_lsclusters В выводе команды рабочий кластер должен иметь статус online на порту 5432.
  2. Управление конкретным кластером вручную:
    
    sudo pg_ctlcluster 9.6 main restart
    sudo pg_ctlcluster 9.6 main status
    

Для обеспечения максимальной стабильности промышленного сервера «1С:Предприятие» всегда выбирайте дистрибутивы с длительным сроком поддержки (LTS) и фиксируйте версии пакетов СУБД.

← На главную