Определяет новое представление.
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
CREATE RECURSIVE VIEW [ schema . ] view_name (column_names) AS SELECT ...;CREATE VIEW [ schema . ] view_name AS WITH RECURSIVE view_name (column_names) AS (SELECT ...) SELECT column_names FROM view_name;name
column_name
WITH ( view_option_name [= view_option_value] [, ... ] )
query
Представления в базе данных YMatrix доступны только для чтения. Система не позволяет выполнять операции вставки, обновления или удаления через представления. Эффект обновления представления можно достичь, создав правила перезаписи (rewrite rules), которые преобразуют операции в соответствующие действия над другими таблицами. Подробнее см. в разделе CREATE RULE.
Обратите внимание, что имена и типы данных столбцов представления будут назначены так, как вы их определите. Например:
CREATE VIEW vista AS SELECT 'Hello World';
Возможны два вида ошибок: имя столбца по умолчанию становится ?column?, а тип данных — unknown. Если вы хотите использовать строковые литералы в результатах представления, используйте подход, подобный следующему:
CREATE VIEW vista AS SELECT text 'Hello World' AS hello;
Доступ к таблицам, на которые ссылается представление, определяется правами владельца представления, а не текущего пользователя (даже если текущий пользователь — суперпользователь). Для суперпользователей это может быть неожиданно, поскольку обычно суперпользователи имеют доступ ко всем объектам. Однако в случае с представлением, если суперпользователь не является его владельцем, даже он должен получить явные права на доступ к таблицам, на которые ссылается представление.
Тем не менее, функции, вызываемые в представлении, обрабатываются так же, как если бы они вызывались напрямую из запроса с использованием этого представления. Поэтому пользователь представления должен иметь разрешение на вызов всех функций, используемых в этом представлении.
Если вы создаете представление с использованием предложения ORDER BY, то при выполнении SELECT из этого представления предложение ORDER BY игнорируется.
При использовании команды 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 (Common Table Expressions) не могут быть квалифицированы по схеме.
Если указан параметр CONTINUOUS, представление непрерывного кластера будет:
CREATE VIEW cv1 WITH (CONTINUOUS, POPULATE=false) AS
SELECT tag_id, COUNT(*), SUM(sensor)
FROM metrics GROUP BY tag_id;
Стандарт SQL предусматривает некоторые дополнительные возможности, недоступные в базе данных YMatrix для команды CREATE VIEW. К необязательным предложениям полного SQL-оператора в стандарте относятся:
CREATE OR REPLACE VIEW является расширением языка базы данных YMatrix. То же самое относится и к концепции временных представлений.