Загрузка данных из временных таблиц

При использовании временных таблиц в качестве источника, необходимо учитывать особенности конкретной СУБД.

PostgreSQL

При создании временной таблицы вы не можете явно указать схему (schema) для таблицы. Все временные таблицы в PostgreSQL попадают в соответствующую схему с именем pg_temp_xxx, где «xxx» — номер сессии (например pg_temp_8 или pg_temp_165). Схема для сессии создаётся автоматически самим PostgreSQL.

Для возможности сделать запрос к временной таблице, необходимо указать правильную схему, что является не тривиальной задачей при периодическом обновлении. Скорее всего понадобится специальная обработка для ETL.

Если подразумевается единоразовая выгрузка, то необходимо определить схему, в которой создалась временная таблица и указать её в запросе либо в шаблоне сценария.

Запрос должен строится следующем образом:

SELECT col1, col2, col-n From pg_temp_xxx.tmp_table_name

где «xxx» — номер сессии, а tmp_table_name — наименование временной таблицы.

Для определения схемы временной таблицы можно воспользоваться запросом:

SELECT schemaname FROM pg_catalog.pg_tables where tablename ='tmp_table_name'

MS SQL

После создания все временные таблицы сохраняются в схеме tempdb, которая имеется по умолчанию в MS SQL. Временные таблицы существуют на протяжении сессии базы данных.

Для взаимодействия с временными таблицами MS SQL через ETL, они должны быть глобальными, т.е. при создании указывается два знака ##.

Так же в запросе указывается схема временной таблицы:

SELECT * FROM  tempdb.##tmp_table_name