При развертывании сервера 1С:Предприятия на операционных системах семейства Linux в связке с СУБД PostgreSQL администраторы нередко сталкиваются с ошибкой операции администрирования: «Ошибка установки или изменения национальных настроек информационной базы. Порядок сортировки не поддерживается базой данных». Эта ошибка обычно возникает на этапе создания новой информационной базы через утилиту командной строки rac или консоль администрирования кластера 1С.
Разберем подробнее причины возникновения этой неполадки и рассмотрим пошаговые методы её устранения.
Платформа 1С:Предприятие предъявляет жесткие требования к параметрам локализации базы данных (Collation и Ctype). При создании информационной базы СУБД должна использовать кодировку UTF8 и правила сортировки, совместимые с языковыми настройками (например, ru_RU.UTF-8).
Проанализируем основные факторы, приводящие к сбою:
initdb) часто выполняется в неинтерактивном режиме с системной локалью C, POSIX или C.UTF-8. В результате шаблонная база template1 наследует эти параметры, и любая новая база данных, создаваемая средствами 1С, получает неподдерживаемый порядок сортировки.rac чувствительна к регистру и синтаксису параметров. Использование значений вида RU_ru или RU_RU приводит к ошибке парсинга или несоответствию настроек. Допустимыми являются краткий код ru или стандартный ru_RU.ru_RU.UTF-8, СУБД не сможет использовать необходимые правила сравнения строк.Сначала проверим, какие параметры сортировки назначены существующим базам данных в 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
Рассмотрим несколько способов приведения параметров базы данных и кластера СУБД к требованиям 1С.
Если нет возможности пересоздавать весь кластер СУБД, создадим целевую базу данных вручную с явным указанием требуемой кодировки и параметров сортировки:
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"
Если на сервере СУБД еще нет рабочих баз, правильнее всего пересоздать кластер PostgreSQL целиком, чтобы все вновь создаваемые базы автоматически наследовали корректную локаль:
sudo systemctl stop postgresql
18 или 16):
sudo pg_dropcluster 18 main
ru_RU.UTF-8:
sudo pg_createcluster --locale ru_RU.UTF-8 -e UTF-8 18 main
sudo systemctl start postgresql
При использовании специализированных сборок СУБД (например, Postgres Pro 1C) инициализацию можно выполнить штатными средствами пакета:
PGDATA).
/opt/pgpro/1c-18/bin/pg-setup initdb --locale=ru_RU.UTF-8 --encoding=UTF-8
Проанализируем переменные окружения, с которыми запускается служба сервера 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С.