pg_temp — это пространство СУБД PostgreSQL для временных таблиц, то есть таблиц, существующих в пределах жизни одного соединения (в терминах СУБД) или сеанса (в терминах кластера 1С).

Такие таблицы мы можем увидеть в тексте запроса СУБД, если в запросе на языке запросов 1С присутствует конструкция ПОМЕСТИТЬ, которая и помещает выборку во временную таблицу. Таким образом созданием этой временной таблицей управляет разработчик.

Но не всегда появление данной таблицы зависит от разработчика.

В некоторых ситуациях мы можем обнаружить в тексте запроса pg_temp, создание которой не инициировали авторы кода.

Приведём пример реального запроса из технологического журнала:

В запросе присутствует таблица pg_temp.tt1.

Поискав следы ее создания в журнале ранее по времени. Обнаружим записи со созданию индекса:

и самой таблицы:

В нашем случае платформа сама посчитала необходимым и создала временную таблицу. Мы, конечно, не знаем всех мотивов, по которым это произошло, они скрыты под капотом платформы и достоверно известны только её разработчикам.

Но, известно, что сделано это было для оптимизации запросов с условием «В», связано с тем, что условие накладывается на поле составного типа и в условии есть ссылки на разные типы объектов.

В нашем случае подобная оптимизация привела к печальным последствиям.

Было организовано соединение с временной таблицей, которое заняло 65% времени выполнения всего запроса.

Это поведение, приводящее к ошибочной оптимизации, было исправлено в https://bugboard.v8.1c.ru/error/000098601.