Как настроить PostgreSQL для работы с сервером 1С 8.2 и что значит «собрать с integer_datetimes=off»?

Системный администратор IT и автоматизация бизнеса
← На главную

При попытке развернуть сервер СУБД PostgreSQL для платформы 1С:Предприятие 8.2 администраторы часто сталкиваются с официальным примечанием: для работы с версиями 1С ниже 8.3.10 необходимо использовать сборку PostgreSQL с установленным значением параметра integer_datetimes=off. Разберем подробнее, что означает этот параметр, почему он важен для платформы 8.2 и какими способами можно решить эту задачу в операционной системе Windows.

Выясним причину: за что отвечает параметр integer_datetimes

Параметр integer_datetimes определяет внутренний формат хранения дат и времени в базе данных PostgreSQL:

  1. integer_datetimes=off — даты и время хранятся как числа с плавающей точкой двойной точности (тип double precision).
  2. integer_datetimes=on — даты хранятся в виде 64-битных целых чисел (микросекунды).

Сервер 1С:Предприятие 8.2 и ранние релизы платформы 8.3 (до версии 8.3.10) жестко рассчитаны на работу с датами во формате с плавающей точкой (integer_datetimes=off). Если подключить 1С 8.2 к СУБД, скомпилированной с integer_datetimes=on, платформа не сможет корректно считывать и записывать значения даты и времени, что приведет к сбоям и ошибкам выполнения SQL-запросов.

Важная особенность: этот параметр задается исключительно на этапе компиляции исходного кода PostgreSQL. Его невозможно изменить через настройки в файле postgresql.conf или с помощью SQL-команд во время работы сервера.

Что означает «собрать» PostgreSQL и особенности работы на Windows

Термин «собрать» означает компиляцию бинарных исполняемых файлов СУБД из исходного кода. Для выполнения сборки под управлением Windows требуется развертывание специальной среды компиляции (Microsoft Visual Studio / MSVC, Perl, Flex, Bison) и передача флага --disable-integer-datetimes при конфигурации исходников.

Сборка PostgreSQL из исходников под Windows — трудоемкий процесс. Кроме того, начиная с версии PostgreSQL 10 возможность отключения integer_datetimes была полностью удалена из кода СУБД. Поэтому собрать современные версии PostgreSQL (10 и новее) с этим флагом технически невозможно.

Варианты решения проблемы

Проанализируем практические способы запуска базы 1С 8.2 на PostgreSQL без необходимости ручной компиляции СУБД из исходного кода.

Способ 1. Использование готовых дистрибутивов PostgreSQL от 1С

Самый простой и надежный путь — установить уже собранную и протестированную версию PostgreSQL, выложенную в разделе обновлений 1С или на специализированных ресурсах разработчиков (например, сборки Postgres Pro для 1С). Сборки дистрибутивов PostgreSQL версий 9.1.9, 9.2 и 9.3.17 заранее скомпилированы с нужным значением integer_datetimes=off и поставляются в виде стандартных инсталляторов под Windows.

Для платформы 1С 8.2.19 оптимальным решением является использование версии PostgreSQL 9.3.17 от 1С или Postgres Pro.

Способ 2. Переход на платформу 1С 8.3 в режиме совместимости

Если необходимо использовать более современные релизы PostgreSQL (например, 9.6 и новее), рекомендуется обновить сам сервер 1С:Предприятие:

  1. Устанавливаем сервер 1С:Предприятие версии 8.3.10 или выше. Поддержка штатного формата integer_datetimes=on появилась именно начиная с этой версии.
  2. В конфигураторе 1С переводим информационную базу в режим совместимости с версией 8.2.
  3. Это позволяет оставить логику и код конфигурации 1С 8.2 без изменений, используя при этом стандартные сборки PostgreSQL.

Обязательные параметры postgresql.conf для работы с 1С

При использовании любой готовой совместимой версии PostgreSQL убедимся, что в файле конфигурации postgresql.conf внесены следующие ключевые настройки для работы с платформой 1С:

  1. standard_conforming_strings = off — обеспечивает корректную обработку экранирования символов в строках.
  2. escape_string_warning = off — отключает предупреждения об экранировании.
  3. max_locks_per_transaction = 256 (или более) — необходимо из-за активного использования временных таблиц платформой 1С.
← На главную