CREATE VIEW
Определяет новое представление.
Синтаксис
CREATE [OR REPLACE] [TEMP | TEMPORARY] [RECURSIVE] VIEW <name> [ ( <column_name> [, ...] ) ]
[ WITH ( <view_option_name> [= <view_option_value>] [, ... ] ) ]
AS <query>
[ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
Описание
Команда CREATE VIEW определяет представление на основе запроса.
Представление не материализуется физически.
Вместо этого запрос выполняется каждый раз, когда на представление ссылаются в запросе.
CREATE OR REPLACE VIEW действует аналогично, но если представление с таким именем уже существует, оно заменяется.
Новый запрос должен генерировать те же столбцы, которые генерировал существующий запрос представления (то есть те же имена столбцов в том же порядке и с теми же типами данных), но может добавлять дополнительные столбцы в конец списка.
Вычисления, формирующие выходные столбцы, могут быть совершенно другими.
Если указано имя схемы, представление создается в указанной схеме. В противном случае оно создается в текущей схеме. Временные представления существуют в специальной схеме, поэтому имя схемы не может быть указано при создании временного представления. Имя представления должно отличаться от имени любого другого представления, таблицы, последовательности, индекса или сторонней таблицы в той же схеме.
Параметры
| Параметр | Описание |
|---|---|
TEMPORARY | TEMP |
Если указано, представление создается как временное.
Временные представления автоматически удаляются по завершении текущей сессии.
Существующие постоянные отношения с тем же именем не видны текущей сессии, пока временное представление существует, если только на них не ссылаются с указанием схемы.
Если какая-либо из таблиц, на которые ссылается представление, является временной, представление создается как временное (независимо от того, указан ли параметр |
RECURSIVE |
Создает рекурсивное представление. Синтаксис:
эквивалентен:
Для рекурсивного представления необходимо указать список имен столбцов |
name |
Имя (опционально указанное со схемой) создаваемого представления |
column_name |
Опциональный список имен, используемых для столбцов представления. Если не указан, имена столбцов определяются из запроса |
WITH ( <view_option_name> [= <view_option_value>] [, … ] ) |
Выражение задает опциональные параметры для представления; поддерживаются следующие параметры:
|
query |
Команда SELECT или VALUES, которая определяет столбцы и строки представления |
Примечания
Представления в Greengage DB доступны только для чтения. Система не допускает выполнение операций вставки, обновления или удаления для представления. Эффект обновляемого представления можно получить, создав правила перезаписи для представления, перенаправляющие действия на другие таблицы. Для получения дополнительной информации см. CREATE RULE.
Убедитесь, что имена и типы данных столбцов представления будут назначены так, как вы хотите. Например:
CREATE VIEW vista AS SELECT 'Hello World';
является плохой практикой по двум причинам: имя столбца по умолчанию будет ?column?, а тип данных столбца по умолчанию будет unknown.
Если вы хотите использовать строковый литерал в результатах представления, используйте что-то вроде:
CREATE VIEW vista AS SELECT text 'Hello World' AS hello;
Доступ к таблицам, на которые ссылается представление, определяется правами владельца представления, а не текущего пользователя (даже если текущий пользователь является суперпользователем). Это может вызвать путаницу в случае суперпользователей, поскольку суперпользователи обычно имеют доступ ко всем объектам. В случае представления даже суперпользователям необходимо явно предоставить доступ к таблицам, на которые ссылается представление, если они не являются владельцем представления.
При этом функции, вызываемые в представлении, обрабатываются так же, как если бы они вызывались непосредственно из запроса, использующего представление. Поэтому пользователь представления должен иметь права на вызов всех функций, используемых представлением.
Если вы создаете представление с выражением ORDER BY, это выражение игнорируется при выполнении SELECT из представления.
Когда CREATE OR REPLACE VIEW применяется к существующему представлению, изменяется только определяющее SELECT-правило представления.
Другие свойства представления, включая владельца, права доступа и правила, отличные от SELECT, остаются без изменений.
Чтобы заменить представление, необходимо быть его владельцем (включая членство в роли-владельце).
Примеры
Создать представление, содержащее все комедийные фильмы:
CREATE VIEW comedies AS
SELECT *
FROM films
WHERE kind = 'comedy';
Эта команда создаст представление, содержащее столбцы, которые есть в таблице film на момент создания представления.
Хотя для создания представления был использован *, столбцы, добавленные позже в таблицу, не будут включены в представление.
Создать представление, возвращающее десять наиболее популярных детских имен:
CREATE VIEW topten AS
SELECT name, rank, gender, year
FROM names,
rank
WHERE rank < '11'
AND names.id = rank.id;
Создать рекурсивное представление, содержащее числа от 1 до 100:
CREATE RECURSIVE VIEW public.nums_1_100 (n) AS
VALUES (1)
UNION ALL
SELECT n + 1
FROM nums_1_100
WHERE n < 100;
Обратите внимание, что хотя имя рекурсивного представления в этой команде CREATE VIEW указано со схемой, его внутренняя ссылка на себя не включает имя схемы.
Это связано с тем, что имя неявно созданного общего табличного выражения (CTE) не может содержать указание схемы.
Совместимость
Стандарт SQL определяет некоторые дополнительные возможности для команды CREATE VIEW, которые отсутствуют в Greengage DB.
Опциональные выражения полной SQL-команды по стандарту:
-
CHECK OPTION— эта опция относится к обновляемым представлениям. Все командыINSERTиUPDATEдля представления будут проверяться на соответствие данных условию, определяющему представление (то есть новые данные должны быть видимы через представление). Если данные не соответствуют, обновление будет отклонено. -
LOCAL— проверка целостности только для данного представления. -
CASCADED— проверка целостности для данного представления и всех зависимых представлений.CASCADEDпредполагается по умолчанию, если не указано ниCASCADED, ниLOCAL.
CREATE OR REPLACE VIEW является языковым расширением Greengage DB.
Концепция временного представления также является расширением.