При обновлении платформы 1С:Предприятие с ветки 8.2 или ранних релизов 8.3 на современные версии (начиная с 8.3.9) системные администраторы нередко сталкиваются с критической ошибкой СУБД. Проблема проявляется как при обычном запуске конфигурации в пользовательском режиме, так и при попытке запустить тестирование и исправление информационной базы в конфигураторе.
Текст ошибки в журнале обычно выглядит следующим образом:
Ошибка СУБД:
42601:ERROR: syntax error at near "not"
LINE 1: create table if not exists _tmpRCT (TabID bytea not null pri...
Разберем детально техническую причину такого поведения и рассмотрим проверенные способы восстановления штатной работы кластера 1С.
Проанализируем текст ошибки и логику взаимодействия платформы с базой данных:
not.CREATE TABLE IF NOT EXISTS была официально представлена и добавлена в ядро PostgreSQL только начиная с версии 9.1. Во всех более ранних релизах (PostgreSQL 8.4, 9.0 и сборках 1C на их базе) данный синтаксис считается недопустимым._tmpRCT, используемой для контроля транзакций, блокировок и наборов записей) платформа перестала делать предварительные запросы к системным каталогам и перешла на прямую инструкцию CREATE TABLE IF NOT EXISTS.integer_datetimes = off (хранение даты/времени с плавающей точкой). Начиная с версии 8.3.3, платформа 1С штатно требует целочисленный формат integer_datetimes = on, который по умолчанию активирован во всех современных дистрибутивах PostgreSQL.Таким образом, платформа 8.3.9 и новее архитектурно и синтаксически несовместима с PostgreSQL 9.0 и более старыми сборками.
Для долговременной и стабильной работы системы требуется установить актуальную версию СУБД PostgreSQL, оптимизированную для работы с «1С:Предприятие» (версии 9.4, 9.6, 10 или более современные сборки от Postgres Professional или фирмы 1С).
Важно: Из-за смены формата integer_datetimes прямое обновление каталога данных СУБД через утилиту pg_upgrade со старых версий (9.0) на новые (9.4+) невозможно. Перенос базы данных необходимо выполнять логически.
Разберем пошаговый порядок корректной миграции:
.dt). Альтернативно можно сделать текстовый дамп средствами утилиты pg_dump.5433).pgAdmin или утилиту createdb создадим новую чистую базу данных в обновленном кластере СУБД с параметрами кодировки UTF8 и локали ru_RU.UTF-8 (или Russian_Russia.1251 для Windows)..dt файл.Если обновление СУБД в текущий момент невозможно из-за регламента или инфраструктурных ограничений, можно временно вернуться на более ранний релиз платформы 1С.
Рассмотрим порядок действий для временного решения:
8.3.8.1747). В этих версиях внутренний генератор запросов платформы еще не использовал конструкцию IF NOT EXISTS и успешно работает с СУБД PostgreSQL 9.0.Отметим, что данный вариант является временной мерой, так как дальнейшее обновление типовых конфигураций 1С неизбежно потребует актуализации версии платформы и соответствующего обновления версии СУБД.