Defines a new view.
概要
REATE[OR REPLACE] [TEMP | TEMPORARY] VIEW name
[ (column_name [, ...] ) ]
ASquery
描述
CREATE VIEW定义查询的视图。 视图没有实际物化。 相反,每次在查询中引用视图时,都会运行查询。
CREATE OR REPLACE VIEW是类似的,但是如果同名的视图已经存在,则会被替换。 您只能使用生成相同列列(相同列名称和数据类型)的新查询替换视图。
如果给定了模式名称,则在指定的模式中创建视图。 否则,它将在当前模式中创建。 临时视图存在于特殊模式中,因此在创建临时视图时可能不会给出模式名称。 视图的名称必须与同一模式中任何其他视图,表,序列或索引的名称不同。
parameter
TEMPORARY | TEMP
如果指定,视图将创建为临时视图。临时视图会在当前会话结束时自动删除。当临时视图存在时,当前会话不存在具有相同名称的现有永久关系,除非它们以模式限定名称引用。如果视图引用的任何表是临时的,则将视图创建为临时视图(是否指定TEMPORARY)。
name
要创建的视图的名称(可选模式限定)。
column_name
用于视图列的可选名称列表。如果没有给出,列名将从查询中推导出来。
query
一个SELECT或VALUES命令,它将提供视图的列和行。
Greenplum数据库中的视图是只读的。系统将不允许在视图上插入,更新或删除。您可以通过在视图上创建重写规则到其他表上的适当操作来获得可更新视图的效果。有关更多信息,请参阅CREATE RULE。
请注意,视图列的名称和数据类型将按照您想要的方式分配。例如:
CREATE VIEW vista AS SELECT'Hello World';
是两种不好的形式:列名称默认为?coiumn?,列数据类型默认为未知。如果您想在视图的结果中使用字符串文字,请使用以下内容:
CREATE VIEW vista AS SELECT文本“Hello World”AS hello;
视图中引用的表的访问由视图所有者的权限决定,而不是当前用户(即使当前用户是超级用户)。这在超级用户的情况下可能会令人困惑,因为超级用户通常可以访问所有对象。在视图的情况下,如果超级用户不是视图的所有者,那么即使是超级用户也必须明确授予对视图引用的表的访问权限。
但是,视图中调用的函数的处理方式与使用视图直接从查询中调用的方式相同。因此,视图的用户必须具有调用视图使用的任何功能的权限。
如果使用ORDER BY子句创建视图,则在从视图执行SELECT时将忽略ORDER BY子句。
示例
Create a viewconsisting of all comedy films:
CREATE VIEWcomedies AS SELECT * FROM films WHERE kind = 'comedy';
Create a viewthat gets the top ten ranked baby names:
CREATE VIEWtopten AS SELECT name, rank, gender, year FROM names, rank WHERE rank < '11' ANDnames.id=rank.id;
兼容性
The SQL standard specifies someadditional capabilities for the CREATE VIEW statement that are not in GreenplumDatabase. The optional clauses for the full SQL command in the standard are:
• CHECKOPTION —检查选项 - 此选项与可更新视图有关。将检查视图上的所有INSERT和UPDATE命令,以确保数据满足视图定义条件(即,新数据将通过视图可见)。如果没有,更新将被拒绝。
• LOCAL —检查此视图的完整性。
• CASCADED —检查此视图和任何从属视图的完整性。如果既不指定CASCADED也不指定LOCAL,则假定为CASCADED。
• CREATE ORREPLACE VIEW是Greenplum数据库语言扩展。临时视图的概念也是如此。
• 相关参考
SELECT, DROP VIEW