Как исправить ошибку unrecognized configuration parameter lc_collate при использовании PostgreSQL 16 и 1С?

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

При переходе на актуальные версии систем управления базами данных специалисты часто сталкиваются с проблемами обратной совместимости. Одной из наиболее заметных проблем при внедрении PostgreSQL 16 в инфраструктуру 1С:Предприятие, особенно когда реализуется концепция защищенной IT инфраструктуры на базе Astra Linux, стала фатальная ошибка: ERROR: unrecognized configuration parameter "lc_collate". В этой статье мы подробно разберем, почему возникает эта ситуация, какие архитектурные изменения в СУБД к ней привели, и как правильно обновить компоненты системы, чтобы восстановить работоспособность базы данных.

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

Для начала проанализируем ситуацию с точки зрения развития ядра PostgreSQL. До версии 16 параметры lc_collate и lc_ctype существовали в конфигурации как глобальные переменные (GUC — Grand Unified Configuration). Они были доступны только для чтения и отображали настройки локали и правил сортировки, заданные при инициализации кластера (initdb).

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

Однако в PostgreSQL 16 разработчики приняли решение полностью удалить эти переменные из списка глобальных параметров. Это связано с переходом к более гибкой модели управления локалями, включая расширенную поддержку ICU (International Components for Unicode). Теперь настройки локали привязаны непосредственно к базе данных или даже к отдельным объектам, и глобальный запрос SHOW более не имеет смысла с точки зрения архитектуры СУБД. Когда «старая» версия 1С пытается выполнить этот запрос, PostgreSQL 16 отвечает ошибкой, так как параметр ему больше неизвестен.

Разберем совместимые версии платформы 1С

Единственным надежным способом решения проблемы является обновление технологической платформы 1С до версий, в которых механизм проверки параметров был переписан. В новых релизах 1С перестала использовать команду SHOW и начала получать данные о локали напрямую из системных каталогов. Чтобы упростить процесс перехода, можно использовать консольное приложение для удобного переключения между платформами. Рассмотрим подробнее минимальные номера сборок (билдов), в которых реализована поддержка PostgreSQL 16:

  1. Для ветки 8.3.22 — версия 8.3.22.2501 и выше;
  2. Для ветки 8.3.23 — версия 8.3.23.2144 и выше;
  3. Для ветки 8.3.24 — версия 8.3.24.1528 и выше;
  4. Для ветки 8.3.25 — версия 8.3.25.1257 и выше.

Если ваша текущая платформа относится, например, к ветке 8.3.24, но имеет номер сборки ниже 1528, ошибка lc_collate будет сохраняться даже при правильной настройке Linux-сервера. Обновление платформы в данном случае является обязательным техническим условием.

Проанализируем нюансы выбора дистрибутива PostgreSQL

При работе с 1С крайне важно понимать разницу между «ванильной» (официальной) версией PostgreSQL и специализированными сборками. Рассмотрим, на что стоит обратить внимание системному администратору при выборе дистрибутива PostgreSQL:

Ванильный PostgreSQL: Стандартные репозитории дистрибутивов Linux содержат чистую версию СУБД. В ней отсутствуют патчи, необходимые для корректной работы специфических механизмов 1С. Использование ванильной 16-й версии без исправлений практически гарантирует проблемы с производительностью.

Сборки от Postgres Pro или 1С: Разработчики этих дистрибутивов адаптируют ядро СУБД под требования платформы. Если вы планируете развертывание в среде Astra Linux 1.8, вам может значительно помочь сценарий python для автоматизации установки и обновления СУБД PostgreSQL и 1С. Эти сборки могут содержать «заглушки» для удаленных параметров, чтобы обеспечить совместимость, но обновление 1С остается приоритетом.

Посмотрим на новые провайдеры локали: ICU против Libc

В PostgreSQL 16 появилась возможность выбирать провайдера локали при создании базы данных с помощью параметра --locale-provider. Это важный момент, который мы должны учитывать при развертывании системы.

Несмотря на то, что современные релизы 1С начинают поддерживать ICU, мы рекомендуем при инициализации базы данных в 16-й версии по-прежнему придерживаться провайдера libc. Для тех, кто предпочитает графический интерфейс командной строке, полезным будет изучить особенности обслуживания баз данных 1C на Postgresql под Astra Linux без использования сложных скриптов.

Проверим настройки локали вручную

Если нам необходимо убедиться в том, какие параметры локали установлены для базы данных, когда команда SHOW больше не работает, мы можем воспользоваться прямым запросом к системным таблицам. Разберем пример такого запроса:


SELECT 
    datname AS database_name, 
    datcollate AS collation, 
    datctype AS ctype,
    datlocprovider AS provider
FROM 
    pg_database 
WHERE 
    datname = 'имя_вашей_базы';

Этот запрос обращается к системному каталогу pg_database, который остается надежным источником информации в 16-й версии. Поле datlocprovider подскажет вам, какой провайдер используется (символ 'c' для libc или 'i' для ICU).

Пошаговый алгоритм решения проблемы

Для успешного запуска связки 1С + PostgreSQL 16 выполним следующие действия:

  1. Проверим версию платформы: Убедимся, что установленный билд 1С выше критического порога. При необходимости выполняем обновление серверной и клиентской частей.
  2. Выберем правильный дистрибутив СУБД: Скачиваем сборку PostgreSQL 16, адаптированную для 1С.
  3. Инициализируем кластер: При создании кластера следим за тем, чтобы кодировка была UTF8, а локаль соответствовала требованиям (например, ru_RU.UTF-8).
  4. Создадим базу данных: При создании базы через консоль администрирования 1С платформа сама передаст нужные параметры СУБД.
  5. Протестируем подключение и обслуживание: Запустим клиент 1С. Для поддержания базы в актуальном состоянии можно использовать генератор скрипта для индексации таблиц базы данных PostgreSQL, что поможет избежать проблем с производительностью в будущем.

Таким образом, мы выяснили, что проблема не является критическим багом СУБД, а представляет собой следствие закономерного развития PostgreSQL. Своевременное обновление технологической платформы 1С полностью устраняет данную ошибку и позволяет использовать такие преимущества 16-й версии, как улучшенная производительность параллельных запросов и оптимизированная работа с индексами.

← На главную