Как исправить ошибку FATAL: could not access file "online_analyze" при запуске PostgreSQL на Ubuntu для 1С?

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

При администрировании серверов 1С на базе ОС Ubuntu системные администраторы часто сталкиваются с ситуацией, когда после очередного обновления системы база данных PostgreSQL внезапно перестает запускаться. В системном журнале при этом красуется критическая ошибка: FATAL: could not access file "online_analyze": No such file or directory. На первый взгляд кажется, что файлы базы данных повреждены, но на самом деле проблема кроется в механизме обновления пакетов Linux. В этой статье мы подробно разберем, почему это происходит, и как восстановить работоспособность сервера.

Выясним причину возникновения ошибки

Для начала проанализируем ситуацию. Платформа 1С:Предприятие предъявляет специфические требования к СУБД PostgreSQL. Стандартная ("ванильная") версия PostgreSQL из официальных репозиториев Ubuntu не содержит некоторых оптимизаций, необходимых для высокой производительности 1С. Поэтому фирма 1С (или компания Postgres Pro) выпускает свои модифицированные сборки.

Ключевыми компонентами таких сборок являются модули online_analyze и plantuner. online_analyze крайне важен для 1С, так как платформа постоянно создает и удаляет временные таблицы. Стандартный планировщик PostgreSQL не всегда успевает собирать по ним статистику, что приводит к медленной работе запросов. Этот модуль заставляет систему анализировать статистику мгновенно. plantuner позволяет более гибко управлять индексами в запросах 1С.

Проблема возникает в момент выполнения команды apt upgrade. Система видит, что в репозиториях Ubuntu появилась более новая минорная версия (например, обновление с 10.5 до 10.6). Менеджер пакетов заменяет установленные специализированные файлы от 1С на стандартные пакеты Ubuntu. В стандартных пакетах библиотек online_analyze.so физически не существует, но в файле конфигурации postgresql.conf параметр shared_preload_libraries все еще требует их загрузки. В итоге сервер не находит нужный файл и завершает работу с ошибкой FATAL.

Проверим наличие проблемы в файловой системе

Прежде чем приступать к лечению, давайте убедимся, что наши догадки верны. Рассмотрим, как проверить физическое наличие необходимых библиотек. Для 10-й версии PostgreSQL в Ubuntu путь к библиотекам выглядит следующим образом:

/usr/lib/postgresql/10/lib/

Попробуем найти там файл модуля:

ls -la /usr/lib/postgresql/10/lib/ | grep online_analyze

Если команда ничего не возвращает — значит, обновление системы "затерло" вашу специализированную сборку стандартной. Система больше не знает, что такое online_analyze.

Шаг 1: Восстановление корректных пакетов

Разберем по шагам процесс восстановления. Нам необходимо вернуть те версии пакетов, которые предназначены специально для 1С. Если вы скачивали их с портала ИТС, они представляют собой набор .deb файлов.

  1. Удалим некорректно установленные пакеты. Нам нужно избавиться от стандартных версий, которые установила Ubuntu. Обычно это postgresql-10, postgresql-client-10 и библиотека libpq5.
  2. Установим пакеты из дистрибутива 1С. Перейдем в директорию, где лежат оригинальные файлы .deb от нужной версии (например, 10.5-9.1C или выше) и выполним установку:
    
    sudo dpkg -i libpq5_10.5-10.1C_amd64.deb
    sudo dpkg -i postgresql-client-10_10.5-10.1C_amd64.deb
    sudo dpkg -i postgresql-10_10.5-10.1C_amd64.deb
    
  3. Проверим зависимости. Если после установки dpkg жалуется на недостающие зависимости, выполним sudo apt-get install -f.

Шаг 2: Блокировка автоматического обновления (apt-mark hold)

Самый важный этап, который многие упускают, — это запрет системе трогать эти пакеты в будущем. Чтобы при следующем обновлении apt upgrade ситуация не повторилась, нам нужно "заморозить" текущие версии пакетов.

Рассмотрим, как это сделать с помощью команды apt-mark hold. Нам нужно заблокировать три основных компонента. Выполним в терминале:


sudo apt-mark hold libpq5
sudo apt-mark hold postgresql-10
sudo apt-mark hold postgresql-client-10

Теперь, когда вы будете запускать обновление системы, apt сообщит, что эти пакеты оставлены в неизменном виде (kept back). Это гарантирует, что библиотеки online_analyze останутся на своих местах.

Альтернативное и временное решение

Проанализируем ситуацию, когда сервер нужно запустить немедленно, а нужных .deb пакетов под рукой нет. В этом случае мы можем временно отключить использование проблемных модулей, чтобы PostgreSQL смог стартовать.

Внимание: Это решение приведет к значительному снижению производительности 1С, так как планировщик БД начнет ошибаться в выборе планов запросов!

  1. Откроем файл конфигурации: sudo nano /etc/postgresql/10/main/postgresql.conf.
  2. Найдем строку, начинающуюся с shared_preload_libraries.
  3. Отредактируем её, удалив упоминание проблемных модулей. Вместо: shared_preload_libraries = 'online_analyze, plantuner' сделаем: shared_preload_libraries = ''
  4. Сохраним файл (Ctrl+O) и выйдем (Ctrl+X).
  5. Попробуем запустить службу: sudo systemctl start postgresql.

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

Резюме и рекомендации

Мы выяснили, что ошибка online_analyze — это классический конфликт между репозиториями ОС и вендорским ПО. Для предотвращения подобных проблем в будущем:

Соблюдение этих простых правил позволит вашему серверу 1С работать стабильно и без внезапных остановок после плановых технических работ.

← На главную