Почему 1С:Предприятие 8.2 не работает с новыми версиями PostgreSQL?

Системный администратор 1С v8.3 (Обычные формы)
← На главную

Многие администраторы и разработчики, поддерживающие старые конфигурации на платформе 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 и его сложности

Хорошо, если новые версии не подходят, может быть, стоит установить старую, совместимую версию, например, PostgreSQL 9.6? Здесь мы сталкиваемся с новой проблемой — зависимостями в современных операционных системах.

Попытка установить пакет PostgreSQL 9.6 на свежую ОС, такую как Ubuntu 22.04, скорее всего, провалится. Причина в том, что в репозиториях новых дистрибутивов отсутствуют старые версии системных библиотек, от которых зависит устаревший пакет. Классический пример — библиотека libssl1.1, которая была заменена на libssl3.

Существуют обходные пути, но они крайне не рекомендуются для продуктивных серверов:

  1. Подключение старых репозиториев: Можно добавить в менеджер пакетов `apt` репозитории от старых версий Ubuntu (например, 18.04 Bionic), чтобы "дотянуть" нужные зависимости. Это может привести к конфликтам пакетов и нарушить стабильность системы.
  2. Ручная установка зависимостей: Можно найти и установить необходимые `.deb` пакеты старых библиотек вручную. Этот подход усложняет дальнейшее обслуживание и обновление системы безопасности.

Оба этих метода являются "костылями", которые могут создать больше проблем в долгосрочной перспективе, чем решить.

Единственный, но очень трудоемкий путь: сборка из исходников

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

Порядок действий следующий:

  1. Скачать исходный код нужной версии PostgreSQL (например, 9.6).
  2. Скачать с портала ИТС соответствующие патчи от "1С" (например, Patch_SUBD_PostgreSQL_9.6.6_1.1C.tar.bz2).
  3. Распаковать исходники и применить к ним патчи от "1С". Эти патчи содержат важные оптимизации для работы с временными таблицами и добавляют необходимые расширения.
  4. На этапе конфигурирования сборки (скрипт ./configure) принудительно указать флаг, который установит параметр integer_datetimes=off.
  5. Скомпилировать и установить PostgreSQL.

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

Заключение

Подводя итог, можно с уверенностью сказать, что стабильная и поддерживаемая работа конфигурации на платформе «1С:Предприятие 8.2» с современными версиями PostgreSQL на актуальных операционных системах практически невозможна без сложных и рискованных технических манипуляций. Фундаментальные архитектурные изменения в способе хранения данных делают старую платформу и новую СУБД несовместимыми.

Наиболее правильным, хоть и ресурсоемким, решением является планирование и осуществление полноценного перевода конфигурации на современную версию платформы "1С:Предприятие". Это не только решит проблему с СУБД, но и откроет доступ к новым возможностям платформы и обеспечит дальнейшую поддержку и развитие вашей системы.

← На главную