В PostgreSQL возможно создание временных таблиц, которые могут быть автоматически удалены, например, по завершению транзакции. Временные таблицы полностью поддерживают все возможности обычных таблиц.
Создание:
CREATE { TEMPORARY | TEMP } TABLE [ IF NOT EXISTS ] имя_таблицы ( [
{ имя_столбца тип_данных [ COLLATE правило_сортировки ] [ ограничение_столбца [ ... ] ]
| ограничение_таблицы
| LIKE исходная_таблица [ вариант_копирования ... ] }
[, ... ]
] )
[ INHERITS ( таблица_родитель [, ... ] ) ]
[ WITH ( параметр_хранения [= значение] [, ... ] ) | WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE табл_пространство ]
Пример:
-- Начинаем транзакцию
BEGIN;
-- Создаем временную таблицу на основе SQL-запроса
CREATE TEMP TABLE full_features_history ON COMMIT DROP
AS
SELECT
*
FROM
(
SELECT
id, geog, layer, username, action_type, parent_id, sys_period
FROM
features
WHERE
layer != 'pano'
UNION ALL
SELECT
id, geog, layer, username, action_type, parent_id, sys_period
FROM
features_history
WHERE
layer != 'pano'
) AS combined
ORDER BY sys_period DESC;
-- Создаем необходимые индексы на временной таблице
CREATE INDEX ON full_features_history(id);
CREATE INDEX ON full_features_history(id, username);
-- Анализируем содержимое временной таблицы
ANALYZE full_features_history;
-- Временная таблица будет удалена по завершению транзакции из-за ON COMMIT DROP
COMMIT;