В процессе обновления конфигурации базы данных или сохранения изменений в Конфигураторе администраторы и разработчики могут столкнуться с критическим сбоем. Платформа 1С аварийно прерывает процесс и выводит системное сообщение: Ошибка СУБД: 42P01: ОШИБКА: отношение "_inforgchngr...x1" не существует. Разберем детально, почему возникает эта ошибка и какими способами можно вернуть базу данных в рабочее состояние.
Для понимания сути проблемы проанализируем имя отсутствующей таблицы. Префикс _InfoRgChngR указывает на таблицу регистрации изменений механизма планов обмена для конкретного регистра сведений. Числовой идентификатор (например, 73857) представляет собой внутренний номер объекта метаданных. В 1С его точное имя можно сопоставить программным методом ПолучитьСтруктуруХраненияБазыДанных(). Окончание X1 однозначно свидетельствует о том, что объект добавлен или модифицирован с использованием расширения конфигурации.
Код 42P01 в PostgreSQL сообщает об отсутствии запрашиваемого отношения в схеме данных. В процессе обновления конфигурации движок реструктуризации формирует запрос переноса записей из старой таблицы в новую через конструкцию INSERT INTO ... SELECT ... FROM. Однако из-за ошибки в логике работы платформы с объектами расширений физическая таблица изменений в СУБД создана не была, что и приводит к аварийной остановке.
Выясним основные предпосылки такого поведения:
Params, DBSchema и _extensionsrestruct могут содержать несогласованные метаданные.Рассмотрим самый быстрый способ восстановления, который не требует выгрузки данных и позволяет завершить начатую реструктуризацию. Если СУБД не может найти таблицу, создадим пустую таблицу с требуемым именем вручную средствами администрирования PostgreSQL.
Разберем по шагам порядок действий:
_inforgchngr73857x1. Помним, что имена таблиц 1С в PostgreSQL всегда хранятся в нижнем регистре._noderef (ссылка на узел плана обмена, тип bytea), _messageno (номер сообщения, тип numeric), а также поля, соответствующие измерениям основного регистра сведений. Типы полей измерений можно подсмотреть в основной таблице _inforg73857.Если нет возможности напрямую модифицировать схему СУБД, переключим сервер 1С на классический механизм реструктуризации v1. Старая версия механизма выполняет операции с объектами расширений в другой последовательности и часто помогает обойти баг.
Выполним следующие шаги:
conf.cfg.dbmsTablesRestructuringVersion=v1Посмотрим на стандартные сервисные инструменты платформы, помогающие устранить расхождения между логической и физической структурой базы данных.
Проведем регламентную диагностику:
Поскольку ошибка напрямую связана с объектами расширений (суффикс X1), проанализируем состояние самого расширения:
Если база данных имеет умеренный объем, эффективным решением может стать выгрузка в файл .dt. Файловый движок 1С использует собственную архитектуру таблиц и не зависит от специфических запросов PostgreSQL.
Разберем данный алгоритм:
.dt через меню Конфигуратора..dt из файловой базы.