Как исправить ошибку «extension "mchar" is not available» при создании базы 1С на сервере PostgreSQL?

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

При развертывании клиент-серверной версии 1С:Предприятия на операционной системе Ubuntu (или других дистрибутивах Linux) системные администраторы, используя мониторинг кластеров серверов (удобно через панель кроссплатформенного администрирования серверов и баз 1С), часто сталкиваются с ошибкой: «Ошибка СУБД: 0А000: ERROR: extension "mchar" is not available». Эта проблема возникает даже при использовании официальных дистрибутивов PostgreSQL с сайта 1С. В данной статье мы подробно разберем, почему это происходит, как предотвратить удаление расширений системой и как правильно настроить сервер для стабильной работы.

Выясним причину: почему расширение mchar так важно для 1С?

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

Ошибка mchar.control: No such file or directory означает, что СУБД не может найти управляющий файл расширения. Это происходит либо из-за того, что расширения не были установлены, либо из-за того, что патченная версия PostgreSQL была случайно заменена стандартной версией из репозиториев Ubuntu.

Анализируем конфликт пакетов и роль библиотеки libpq5

Проанализируем типичный сценарий: администратор устанавливает DEB-пакеты, скачанные с releases.1c.ru. Все работает до тех пор, пока в систему не устанавливается дополнительное ПО, например, pgAdmin или zabbix-agent. В этот момент менеджер пакетов apt видит зависимость от библиотеки libpq5. Для комплексного отслеживания состояния СУБД и серверов 1С удобно использовать мониторинг производительности и ошибок СУБД и 1С.

В официальных репозиториях Ubuntu версия libpq5 может быть новее или иметь другой приоритет. Как только apt обновляет эту библиотеку из стандартного репозитория, он «затирает» патченную версию от 1С, что важно учитывать, когда реализуется концепция защищенной IT инфраструктуры. В результате бинарная совместимость нарушается, и 1С-овский PostgreSQL удаляется или заменяется «ванильным», в котором расширений mchar просто не существует. Рассмотрим, как этого избежать.

Решение: Пошаговая установка и фиксация пакетов

Для того чтобы система не обновляла наши специфические пакеты, мы должны использовать механизм apt-mark hold. Разберем последовательность действий:

  1. Установка платформы и СУБД: Установите пакеты 1С:Предприятие и PostgreSQL, скачанные с официального сайта 1С. Убедитесь, что вы устанавливаете основной дистрибутив СУБД.
  2. Установка дополнительных модулей: Проанализируем состав дистрибутивов. В последних версиях PostgreSQL 15 от 1С расширение mchar часто включено в основной архив, но иногда требуется установка пакета contrib. Если ошибка сохраняется, убедитесь, что пакет postgresql-15-contrib-1c (или аналогичный) установлен.
  3. Запрет обновлений (фиксация): Это самый важный шаг. Нам необходимо «заморозить» текущие версии пакетов, чтобы система не заменила их автоматически. Выполним в терминале следующие команды:

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.

Особенности PostgreSQL 15 и работа с шаблоном template1

Разберем нюанс, появившийся в 15-й версии PostgreSQL. В этой версии были ужесточены права доступа к схеме public. При создании новой базы данных 1С копирует настройки из системной базы template1. Если платформа не может создать расширение в новой базе из-за ограничений прав, мы можем «форсировать» установку расширения непосредственно в шаблон.

Выполним следующие шаги в терминале:


psql -U postgres -d template1
CREATE EXTENSION mchar;
CREATE EXTENSION fulleq;
\q

После выполнения этих команд любая новая информационная база, создаваемая на этом сервере, будет по умолчанию содержать необходимые расширения. Проанализируем ситуацию: теперь 1С не нужно будет пытаться создавать их «на лету», так как они уже будут наследоваться из шаблона.

Подготовка локали (Locale) перед инициализацией

Не забудем про еще один важный аспект работы на 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).

Выясним, какую версию PostgreSQL лучше выбрать

В завершение проанализируем выбор версии СУБД для 1С. На текущий момент ситуация выглядит так:

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

← На главную