Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.

Ошибка PostgreSQL 42P01 undefined_table: отношение/таблица не существует

Обновлено: 26.08.2026  ·  Официальная база знаний

СУБД отклоняет запрос к таблице, представлению или материализованному представлению из-за его отсутствия в текущем пространстве имен:

ERROR: relation "my_table" does not exist
LINE 1: SELECT * FROM my_table;
SQLSTATE: 42P01

В среде 1С сбой часто возникает при динамическом формировании прямых SQL-запросов к СУБД без учета префиксов схем, регистра символов или после некорректного обновления конфигурации.

1. Проверка регистра и экранирования двойными кавычками

По умолчанию PostgreSQL приводит все неэкранированные имена идентификаторов к нижнему регистру. Таблицы 1С создаются с именами в смешанном регистре (например, _Document123):

-- Ошибка 42P01 (запрос преобразуется в _document123):
SELECT * FROM _Document123;

-- Корректный запрос с экранированием:
SELECT * FROM "_Document123";

2. Проверка схемы и переменной search_path

-- Просмотр текущего пути поиска схем
SHOW search_path;

-- Установка пути к целевой схеме (по умолчанию public)
SET search_path TO public, my_custom_schema;

-- Прямой вызов с указанием схемы:
SELECT * FROM public."_Reference25";

3. Соответствие имен таблиц объектам метаданных 1С

Для определения реального физического имени таблицы СУБД по объекту 1С используйте функцию ПолучитьСтруктуруХраненияБазыДанных():

// Выполнить в 1С:
ИмяТаблицыХранения = ПолучитьСтруктуруХраненияБазыДанных(
    Метаданные.Документы.РеализацияТоваровУслуг
)[0].ИмяТаблицыХранения;
// Результат вернет имя вида: "_Document245"

4. Проверка существования таблицы в системном каталоге

SELECT schemaname, tablename 
FROM pg_tables 
WHERE tablename ILIKE '%document123%';
Практический опыт инженера: Если ошибка 42P01 возникает в стандартном интерфейсе 1С при штатной работе, это признак расхождения кэша структуры базы данных на сервере приложений. Очистите кэш сеансов на сервере 1С (/srv/1cv8/...) и перезапустите кластер служб ragent.

Частые вопросы (FAQ)

Почему таблица видна в pgAdmin, но скрипт падает с ошибкой 42P01?

Причина в отсутствии схемы таблицы в search_path текущего пользователя или создании таблицы в кавычках с заглавными буквами (PostgreSQL чувствителен к регистру при наличии кавычек).

Как глобально зафиксировать search_path для базы данных 1С?

Выполните команду: ALTER DATABASE db_name SET search_path TO public;

Может ли 42P01 возникать из-за временных таблиц?

Да, временные таблицы (pg_temp) изолированы в рамках конкретной сессии. Если соединение разорвалось или пул соединений переключил сессию на другой процесс-воркер, временная таблица перестает существовать.

Как проверить, к какому типу относится отношение (таблица, view, foreign table)?

Выполните запрос: SELECT relname, relkind FROM pg_class WHERE relname = 'имя_объекта'; (где relkind 'r' - таблица, 'v' - view, 'm' - материализованное представление, 'f' - внешняя таблица).