41.2. Система правил и представления
Представления в PostgreSQL реализованы на основе системы правил. Фактически по сути нет никакого отличия
CREATE VIEW myview AS SELECT * FROM mytab;
от следующих двух команд:
CREATE TABLE myview (same column list as mytab
);
CREATE RULE "_RETURN" AS ON SELECT TO myview DO INSTEAD
SELECT * FROM mytab;
так как именно эти действия CREATE VIEW
выполняет внутри. Это имеет некоторые побочные эффекты. В частности, информация о представлениях в системных каталогах PostgreSQL ничем не отличается от информации о таблицах. Поэтому при анализе запроса нет абсолютно никакой разницы между таблицами и представлениями. Они представляют собой одно и то же — отношения.
41.2.1. Как работают правила SELECT
Правила ON SELECT
применяются ко всем запросам на последнем этапе, даже если это команда INSERT
, UPDATE
или DELETE
. Эти правила отличаются от правил других видов тем, что они модифицируют непосредственно дерево запросов, а не создают новое. Поэтому мы начнём описание с правил SELECT
.
В настоящее время возможно только одно действие в правиле ON SELECT
и это должно быть безусловное действие SELECT
, выполняемое в режиме INSTEAD
. Это ограничение было введено, чтобы сделать правила достаточно безопасными для применения обычными пользователями, так что действие правил ON SELECT
сводится к реализации представлений.
В примерах этой главы рассматриваются два представления с соединением, которые выполняют некоторые вычисления, и которые, в свою очередь, используются другими представлениями. Первое из этих двух представлений затем модифицируется, к нему добавляются правила для операций INSERT
, UPDATE
и DELETE
, так что в итоге получается представление, которое работает как обычная таблица с некоторыми необычными функциями. Это