Многие администраторы и разработчики, поддерживающие старые конфигурации на платформе 1С:Предприятие 8.2, сталкиваются с предупреждением на портале ИТС: любая версия PostgreSQL выше 10 предназначена для платформы 1С не ниже 8.3.18. Возникает закономерный вопрос: с чем это связано и можно ли обойти это ограничение, ведь хочется использовать актуальную операционную систему и СУБД, а перевод старой, сильно доработанной конфигурации на новую платформу — задача дорогая и сложная. Давайте вместе разберемся в технических причинах этой несовместимости и проанализируем возможные пути решения.
Основная причина конфликта кроется в низкоуровневом механизме хранения данных, а именно в параметре PostgreSQL под названием integer_datetimes. Проанализируем ситуацию по шагам.
В старых сборках PostgreSQL, адаптированных фирмой "1С" для своих нужд, этот параметр был установлен в значение off. Это означало, что тип данных timestamp (дата и время) хранился в базе как число с плавающей запятой (float) двойной точности.
Однако, начиная со сборки PostgreSQL 9.6.3-3.1C, фирма "1С" изменила этот подход, чтобы соответствовать стандартному формату, принятому в "ванильной" версии PostgreSQL. В новых сборках параметр integer_datetimes установлен в значение on. Теперь данные типа timestamp хранятся как 64-битное целое число (integer).
Платформа «1С:Предприятие» версии 8.2 и более ранние версии 8.3 (до 8.3.10) рассчитаны на работу исключительно со старым форматом, где integer_datetimes=off. Они просто не умеют корректно обрабатывать новый целочисленный формат даты и времени. При попытке создать информационную базу на такой СУБД вы столкнетесь с ошибками, так как платформа не сможет правильно интерпретировать данные из полей с датой.
Естественным образом возникают вопросы о возможных обходных путях. Рассмотрим, почему самые очевидные из них не сработают.
1. Можно ли установить новую версию PostgreSQL и просто поменять `integer_datetimes` на `off`?
К сожалению, нет. Параметр integer_datetimes является предопределенным (preset). Это означает, что его значение задается на этапе компиляции (сборки) PostgreSQL из исходного кода. Его невозможно изменить в конфигурационном файле postgresql.conf уже установленной и работающей СУБД. Это фундаментальное ограничение, которое делает невозможным "простое" переключение формата на лету.
2. Поможет ли запуск платформы 8.3 в режиме совместимости с 8.2?
Это тоже не решение. Режим совместимости в платформе 1С влияет на поведение исполняемого кода конфигурации, доступность тех или иных объектов метаданных и синтаксических конструкций. Однако он не затрагивает низкоуровневые механизмы взаимодействия платформы с СУБД. Драйвер базы данных, который является частью технологической платформы, все равно будет ожидать тот формат данных, на который он рассчитан. Поэтому для работы с современными версиями PostgreSQL (где integer_datetimes=on) требуется версия платформы 1С, в которой эта поддержка реализована (начиная с 8.3.10, а рекомендуется 8.3.18 и выше), независимо от режима совместимости конфигурации.
Более того, даже при переводе на новую платформу в режиме совместимости старый код может начать вести себя иначе. Например, как было замечено в обсуждении, вызовы методов вроде СрезПоследних у регистров сведений могут начать выдавать ошибки "недостаточно параметров", которые игнорировались старой платформой.
Хорошо, если новые версии не подходят, может быть, стоит установить старую, совместимую версию, например, PostgreSQL 9.6? Здесь мы сталкиваемся с новой проблемой — зависимостями в современных операционных системах.
Попытка установить пакет PostgreSQL 9.6 на свежую ОС, такую как Ubuntu 22.04, скорее всего, провалится. Причина в том, что в репозиториях новых дистрибутивов отсутствуют старые версии системных библиотек, от которых зависит устаревший пакет. Классический пример — библиотека libssl1.1, которая была заменена на libssl3.
Существуют обходные пути, но они крайне не рекомендуются для продуктивных серверов:
Оба этих метода являются "костылями", которые могут создать больше проблем в долгосрочной перспективе, чем решить.
Теоретически, существует способ заставить старую платформу 1С работать с PostgreSQL на новой ОС. Он заключается в самостоятельной сборке СУБД из исходного кода с нужными параметрами. Этот процесс требует глубоких знаний в администрировании Linux.
Порядок действий следующий:
Patch_SUBD_PostgreSQL_9.6.6_1.1C.tar.bz2)../configure) принудительно указать флаг, который установит параметр integer_datetimes=off.Внимание! Этот путь, хоть и технически возможен, несет в себе высокие риски. Вы получаете неподдерживаемую, кастомную сборку СУБД, за стабильность и безопасность которой отвечаете исключительно вы. Любое обновление системы может потребовать повторной компиляции.
Подводя итог, можно с уверенностью сказать, что стабильная и поддерживаемая работа конфигурации на платформе «1С:Предприятие 8.2» с современными версиями PostgreSQL на актуальных операционных системах практически невозможна без сложных и рискованных технических манипуляций. Фундаментальные архитектурные изменения в способе хранения данных делают старую платформу и новую СУБД несовместимыми.
Наиболее правильным, хоть и ресурсоемким, решением является планирование и осуществление полноценного перевода конфигурации на современную версию платформы "1С:Предприятие". Это не только решит проблему с СУБД, но и откроет доступ к новым возможностям платформы и обеспечит дальнейшую поддержку и развитие вашей системы.