CREATE VIEW#

Синтаксис#

CREATE [ OR REPLACE ] VIEW view_name
[ COMMENT view_comment ]
[ SECURITY { DEFINER | INVOKER } ]
AS query

Описание#

Создает новое представление для запроса SELECT. Представление — это логическая таблица, к которой могут обращаться последующие запросы. Представления не содержат данных. Вместо этого запрос, сохраненный в представлении, выполняется каждый раз, когда другой запрос обращается к представлению.

Необязательное предложение OR REPLACE заменяет представление, если оно уже существует, вместо того чтобы выдавать ошибку.

Безопасность#

В режиме безопасности DEFINER, используемом по умолчанию, доступ к таблицам, на которые ссылается представление, выполняется с правами владельца представления (creator или definer представления), а не пользователя, выполняющего запрос. Это позволяет предоставлять ограниченный доступ к базовым таблицам, к которым пользователю может быть запрещен прямой доступ.

В режиме безопасности INVOKER доступ к таблицам, на которые ссылается представление, выполняется с правами пользователя, выполняющего запрос (invoker представления). Представление, созданное в этом режиме, является просто сохраненным запросом.

Независимо от режима безопасности функция current_user всегда возвращает пользователя, выполняющего запрос, и поэтому может использоваться внутри представлений для фильтрации строк или иного ограничения доступа.

Примеры#

Создать простое представление test поверх таблицы orders:

CREATE VIEW test AS
SELECT orderkey, orderstatus, totalprice / 2 AS half
FROM orders

Создать представление test_with_comment с комментарием:

CREATE VIEW test_with_comment
COMMENT 'A view to keep track of orders.'
AS
SELECT orderkey, orderstatus, totalprice
FROM orders

Создать представление orders_by_date, которое агрегирует orders:

CREATE VIEW orders_by_date AS
SELECT orderdate, sum(totalprice) AS price
FROM orders
GROUP BY orderdate

Создать представление, заменяющее существующее представление:

CREATE OR REPLACE VIEW test AS
SELECT orderkey, orderstatus, totalprice / 4 AS quarter
FROM orders

См. также#