Материализованное представление -- это промежуточное звено между таблицей (TABLE) и представлением (VIEW). Оно наполняется и обновляется с помощью SELECT-запроса, как обычное представление, но хранится на диске, как таблицы. Благодаря этому оно может иметь индексы и все остальные свойства таблиц. Изменение данных в материализованном представлении невозможно, поддерживается только чтение.
Появилось в PostgreSQL 9.3.
Создать материализованное представление:
CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] имя_таблицы
[ (имя_столбца [, ...] ) ]
[ WITH ( параметр_хранения [= значение] [, ... ] ) ]
[ TABLESPACE табл_пространство ]
AS запрос
[ WITH [ NO ] DATA ]
Пример:
CREATE MATERIALIZED VIEW full_features_history
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;
Обновление данных в материализованном представлении:
REFRESH MATERIALIZED VIEW [ CONCURRENTLY ] имя
[ WITH [ NO ] DATA ]
Пример:
REFRESH MATERIALIZED VIEW full_features_history;
Если указать WITH NO DATA, то получить данные из представления будет нельзя до тех пор, пока не будет произведено обновление с данными.