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