Как исправить ошибку «Порядок сортировки не поддерживается базой данных» при создании базы 1С в PostgreSQL на Linux?

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

При развертывании сервера 1С:Предприятия на операционных системах семейства Linux в связке с СУБД PostgreSQL администраторы нередко сталкиваются с ошибкой операции администрирования: «Ошибка установки или изменения национальных настроек информационной базы. Порядок сортировки не поддерживается базой данных». Эта ошибка обычно возникает на этапе создания новой информационной базы через утилиту командной строки rac или консоль администрирования кластера 1С.

Разберем подробнее причины возникновения этой неполадки и рассмотрим пошаговые методы её устранения.

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

Платформа 1С:Предприятие предъявляет жесткие требования к параметрам локализации базы данных (Collation и Ctype). При создании информационной базы СУБД должна использовать кодировку UTF8 и правила сортировки, совместимые с языковыми настройками (например, ru_RU.UTF-8).

Проанализируем основные факторы, приводящие к сбою:

  1. Некорректная локаль кластера PostgreSQL по умолчанию: При установке пакетов СУБД в Linux автоматическая инициализация кластера (initdb) часто выполняется в неинтерактивном режиме с системной локалью C, POSIX или C.UTF-8. В результате шаблонная база template1 наследует эти параметры, и любая новая база данных, создаваемая средствами 1С, получает неподдерживаемый порядок сортировки.
  2. Неправильный формат ключа локали в команде rac: Утилита rac чувствительна к регистру и синтаксису параметров. Использование значений вида RU_ru или RU_RU приводит к ошибке парсинга или несоответствию настроек. Допустимыми являются краткий код ru или стандартный ru_RU.
  3. Отсутствие сгенерированной русской локали в ОС: Если в системе Linux не сгенерирована локаль ru_RU.UTF-8, СУБД не сможет использовать необходимые правила сравнения строк.

Шаг 1. Проверяем текущие настройки СУБД и операционной системы

Сначала проверим, какие параметры сортировки назначены существующим базам данных в PostgreSQL. Выполним запрос от имени суперпользователя СУБД:

psql -U postgres -c "select datname, datcollate, datctype from pg_database"

Если в столбцах datcollate и datctype для шаблонов template0, template1 или вашей создаваемой базы указаны значения C, POSIX или en_US.UTF-8, платформа 1С не сможет работать с такой базой данных.

Затем проверим наличие нужной локали в операционной системе с помощью команды:

locale -a

Если в списке отсутствует ru_RU.utf8 (или ru_RU.UTF-8), сгенерируем её:


sudo locale-gen ru_RU.UTF-8
sudo update-locale LANG=ru_RU.UTF-8

Шаг 2. Варианты решения проблемы

Рассмотрим несколько способов приведения параметров базы данных и кластера СУБД к требованиям 1С.

Способ 1. Создание базы данных вручную через PostgreSQL

Если нет возможности пересоздавать весь кластер СУБД, создадим целевую базу данных вручную с явным указанием требуемой кодировки и параметров сортировки:


createdb -U postgres -T template0 --encoding=UTF-8 --lc-collate=ru_RU.UTF-8 --lc-ctype=ru_RU.UTF-8 db_name

После этого зарегистрируем базу в кластере 1С с помощью утилиты rac, исключив флаг создания базы данных СУБД --create-database и скорректировав значение локали:


./rac infobase create \
  --cluster="49ba443c-7f4b-4f77-89e8-1fffb93f94e9" \
  --name="ib_name2" \
  --descr="ib_name" \
  --dbms=PostgreSQL \
  --db-server="localhost" \
  --db-name="db_name" \
  --locale="ru_RU" \
  --db-user="usr1cv8" \
  --db-pwd="usr1cv8" \
  --license-distribution="true"

Способ 2. Пересоздание кластера СУБД с правильной локалью (Debian / Ubuntu)

Если на сервере СУБД еще нет рабочих баз, правильнее всего пересоздать кластер PostgreSQL целиком, чтобы все вновь создаваемые базы автоматически наследовали корректную локаль:

  1. Остановим службу PostgreSQL: sudo systemctl stop postgresql
  2. Удалим автоматически созданный кластер (замените номер версии на вашу, например 18 или 16): sudo pg_dropcluster 18 main
  3. Создадим новый кластер с явным указанием локали ru_RU.UTF-8: sudo pg_createcluster --locale ru_RU.UTF-8 -e UTF-8 18 main
  4. Запустим службу СУБД: sudo systemctl start postgresql

Способ 3. Переинициализация для дистрибутивов Postgres Pro / RHEL / CentOS

При использовании специализированных сборок СУБД (например, Postgres Pro 1C) инициализацию можно выполнить штатными средствами пакета:

  1. Остановим сервис СУБД.
  2. Удалим или очистим директорию данных (PGDATA).
  3. Выполним инициализацию с указанием параметров локализации: /opt/pgpro/1c-18/bin/pg-setup initdb --locale=ru_RU.UTF-8 --encoding=UTF-8
  4. Запустим сервис СУБД и проверим статус.

Шаг 3. Настройка окружения службы сервера 1С

Проанализируем переменные окружения, с которыми запускается служба сервера 1С (srv1cv8 / ragent). Если служба стартует в среде systemd с локалью по умолчанию (LANG=C), это также может приводить к конфликтам порядка сортировки.

Убедимся, что в unit-файле службы или в файле переопределения (systemctl edit srv1cv8-8.3.XX.XXXX@default) заданы переменные:


[Service]
Environment="LANG=ru_RU.UTF-8"
Environment="LC_ALL=ru_RU.UTF-8"

После внесения правок примените конфигурацию командой systemctl daemon-reload и перезапустите службу сервера 1С.

← На главную