При развертывании клиент-серверной версии 1С:Предприятия на операционной системе Ubuntu (или других дистрибутивах Linux) системные администраторы, используя мониторинг кластеров серверов (удобно через панель кроссплатформенного администрирования серверов и баз 1С), часто сталкиваются с ошибкой: «Ошибка СУБД: 0А000: ERROR: extension "mchar" is not available». Эта проблема возникает даже при использовании официальных дистрибутивов PostgreSQL с сайта 1С. В данной статье мы подробно разберем, почему это происходит, как предотвратить удаление расширений системой и как правильно настроить сервер для стабильной работы.
Рассмотрим природу этой ошибки. Стандартная («ванильная») версия PostgreSQL не предназначена для специфических методов работы 1С:Предприятия с данными. Платформа 1С использует собственные алгоритмы сравнения строк и сортировки, которые определяют структура хранения базы данных и отличаются от стандартных механизмов СУБД. Для обеспечения корректной работы компания 1С выпускает патченную версию PostgreSQL, в которую включены специальные расширения:
Ошибка mchar.control: No such file or directory означает, что СУБД не может найти управляющий файл расширения. Это происходит либо из-за того, что расширения не были установлены, либо из-за того, что патченная версия PostgreSQL была случайно заменена стандартной версией из репозиториев Ubuntu.
Проанализируем типичный сценарий: администратор устанавливает DEB-пакеты, скачанные с releases.1c.ru. Все работает до тех пор, пока в систему не устанавливается дополнительное ПО, например, pgAdmin или zabbix-agent. В этот момент менеджер пакетов apt видит зависимость от библиотеки libpq5. Для комплексного отслеживания состояния СУБД и серверов 1С удобно использовать мониторинг производительности и ошибок СУБД и 1С.
В официальных репозиториях Ubuntu версия libpq5 может быть новее или иметь другой приоритет. Как только apt обновляет эту библиотеку из стандартного репозитория, он «затирает» патченную версию от 1С, что важно учитывать, когда реализуется концепция защищенной IT инфраструктуры. В результате бинарная совместимость нарушается, и 1С-овский PostgreSQL удаляется или заменяется «ванильным», в котором расширений mchar просто не существует. Рассмотрим, как этого избежать.
Для того чтобы система не обновляла наши специфические пакеты, мы должны использовать механизм apt-mark hold. Разберем последовательность действий:
mchar часто включено в основной архив, но иногда требуется установка пакета contrib. Если ошибка сохраняется, убедитесь, что пакет postgresql-15-contrib-1c (или аналогичный) установлен.
sudo apt-mark hold libpq5
sudo apt-mark hold postgresql-15
sudo apt-mark hold postgresql-client-15
sudo apt-mark hold libicu*
sudo apt-mark hold libreadline*
Важный момент: Команда apt-mark hold libpq5 является ключевой, так как именно эта библиотека чаще всего становится причиной «сноса» патченной версии PostgreSQL.
Если пакеты установлены, но ошибка сохраняется, нам нужно проверить, «видит» ли сама СУБД эти расширения. Рассмотрим, как это сделать через консоль psql. Подключимся к базе под пользователем postgres и выполним запрос:
SELECT * FROM pg_available_extensions WHERE name = 'mchar';
Проанализируем результат. Если запрос возвращает строку, где заполнена версия (default_version), но поле installed_version пустое — значит, модуль в системе присутствует, но не активирован для конкретной базы. 1С пытается создать расширение автоматически при развертывании ИБ, но ей могут помешать права доступа или настройки безопасности PostgreSQL 15.
Разберем нюанс, появившийся в 15-й версии PostgreSQL. В этой версии были ужесточены права доступа к схеме public. При создании новой базы данных 1С копирует настройки из системной базы template1. Если платформа не может создать расширение в новой базе из-за ограничений прав, мы можем «форсировать» установку расширения непосредственно в шаблон.
Выполним следующие шаги в терминале:
psql -U postgres -d template1
CREATE EXTENSION mchar;
CREATE EXTENSION fulleq;
\q
После выполнения этих команд любая новая информационная база, создаваемая на этом сервере, будет по умолчанию содержать необходимые расширения. Проанализируем ситуацию: теперь 1С не нужно будет пытаться создавать их «на лету», так как они уже будут наследоваться из шаблона.
Не забудем про еще один важный аспект работы на Linux. Перед тем как инициализировать кластер PostgreSQL, необходимо убедиться, что в операционной системе установлена русская локаль. Если кластер будет создан с локалью SQL_ASCII или C, работа 1С будет некорректной. Рассмотрим команды подготовки:
sudo locale-gen ru_RU.UTF-8
sudo update-locale LANG=ru_RU.UTF-8
Только после этого следует приступать к установке и инициализации базы данных. Если СУБД уже установлена с неверной локалью, кластер придется пересоздать (команды pg_dropcluster и pg_createcluster).
В завершение проанализируем выбор версии СУБД для 1С. На текущий момент ситуация выглядит так:
Используя приведенную методику фиксации пакетов и настройки шаблона template1, вы обеспечите стабильную работу сервера 1С и навсегда забудете об ошибке отсутствия расширения mchar.