При переходе на актуальные версии систем управления базами данных специалисты часто сталкиваются с проблемами обратной совместимости. Одной из наиболее заметных проблем при внедрении 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С перестала использовать команду SHOW и начала получать данные о локали напрямую из системных каталогов. Чтобы упростить процесс перехода, можно использовать консольное приложение для удобного переключения между платформами. Рассмотрим подробнее минимальные номера сборок (билдов), в которых реализована поддержка PostgreSQL 16:
Если ваша текущая платформа относится, например, к ветке 8.3.24, но имеет номер сборки ниже 1528, ошибка lc_collate будет сохраняться даже при правильной настройке Linux-сервера. Обновление платформы в данном случае является обязательным техническим условием.
При работе с 1С крайне важно понимать разницу между «ванильной» (официальной) версией PostgreSQL и специализированными сборками. Рассмотрим, на что стоит обратить внимание системному администратору при выборе дистрибутива PostgreSQL:
Ванильный PostgreSQL: Стандартные репозитории дистрибутивов Linux содержат чистую версию СУБД. В ней отсутствуют патчи, необходимые для корректной работы специфических механизмов 1С. Использование ванильной 16-й версии без исправлений практически гарантирует проблемы с производительностью.
Сборки от Postgres Pro или 1С: Разработчики этих дистрибутивов адаптируют ядро СУБД под требования платформы. Если вы планируете развертывание в среде Astra Linux 1.8, вам может значительно помочь сценарий python для автоматизации установки и обновления СУБД PostgreSQL и 1С. Эти сборки могут содержать «заглушки» для удаленных параметров, чтобы обеспечить совместимость, но обновление 1С остается приоритетом.
В 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 выполним следующие действия:
UTF8, а локаль соответствовала требованиям (например, ru_RU.UTF-8).Таким образом, мы выяснили, что проблема не является критическим багом СУБД, а представляет собой следствие закономерного развития PostgreSQL. Своевременное обновление технологической платформы 1С полностью устраняет данную ошибку и позволяет использовать такие преимущества 16-й версии, как улучшенная производительность параллельных запросов и оптимизированная работа с индексами.