CREATE VIEW - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

CREATE VIEW

在数据库中创建一个视图。视图实际上不是具体化的;每当查询中引用视图时,系统都会运行定义视图的查询。要使用外部表创建视图,请包括 WITH NO SCHEMA BINDING 子句。

要创建标准视图,您需要对基础表的访问权限。要查询标准视图,您需要选择针对视图本身的特权,但不需要选择针对基础表的特选。要查询后期绑定视图,您需要选择针对后期绑定视图本身的权限。您还应该确定后期绑定视图的所有者具有对引用的对象 (表、视图或用户定义的函数) 的选择特权。有关后期绑定视图的更多信息,请参阅 使用说明

Syntax

CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ] AS query [ WITH NO SCHEMA BINDING ]

Parameters

OR REPLACE

如果存在同名视图,则将替换视图。您只能将视图替换为生成相同的列集的新查询(使用相同的列名和数据类型)。CREATE OR REPLACE VIEW 将锁定视图以阻止读取和写入,直至操作完成。

替换视图时,将保留它的其他属性(如所有权和授予的权限)。

name

视图的名称。如果提供 schema 名称(例如,myschema.myview),则使用指定 schema 创建视图。否则,将在当前 schema 中创建视图。视图名称必须与同一 schema 中任何其他视图或表的名称不同。

如果指定以“#”开头的视图名称,则视图创建为仅在当前会话中可见的临时视图。

有关有效名称的更多信息,请参阅名称和标识符。您无法在系统数据库 template0、template1 和 padb_harvest 中创建表或视图。

column_name

要用于视图中的列的名称的可选列表。如果未提供列名,则从查询派生列名。可在单个视图中定义的列的最大数目为 1,600。

query

计算结果为表的查询(采用 SELECT 语句的形式)。此表定义视图中的列和行。

WITH NO SCHEMA BINDING

指定视图未绑定到基础数据库对象(例如表和用户定义的函数)的子句。因此,视图与其引用的对象之间不存在依赖关系。即使引用的对象不存在,您也可以创建视图。由于不存在依赖关系,删除或更改引用的对象不会影响视图。在查询视图之前,Amazon Redshift 不会检查依赖关系。要查看有关后期绑定视图的详细信息,请运行 PG_GET_LATE_BINDING_VIEW_COLS 函数。

在包括 WITH NO SCHEMA BINDING 子句时,必须使用 schema 名称来限定 SELECT 语句中引用的表和视图。创建视图时,即使引用的表不存在,schema 也必须存在。例如,以下语句将返回错误。

create view myevent as select eventname from event with no schema binding;

以下语句将成功运行。

create view myevent as select eventname from public.event with no schema binding;
注意

无法从视图进行更新、插入或删除操作。

使用说明

后期绑定视图

后期绑定视图不检查基础数据库对象 (如表和视图),直至该视图被查询为止。因此,您可以修改或删除基础对象,而不必删除和重新创建视图。如果您删除了基础对象,对后期绑定视图的查询将失败。如果对后期绑定视图的查询引用了基础对象中不存在的列,查询将失败。

如果您删除然后重新创建了后期绑定视图的基础表或视图,将使用默认访问权限创建新对象。您可能需要为将查询视图的用户授予对基础对象的权限。

要创建后期绑定视图,请加入 WITH NO SCHEMA BINDING 子句。以下示例创建一个没有 schema 绑定的视图。

create view event_vw as select * from public.event with no schema binding; select * from event_vw limit 1; eventid | venueid | catid | dateid | eventname | starttime --------+---------+-------+--------+---------------+-------------------- 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00

以下示例显示您可以修改基础表,而不必重新创建视图。

alter table event rename column eventname to title; select * from event_vw limit 1; eventid | venueid | catid | dateid | title | starttime --------+---------+-------+--------+---------------+-------------------- 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00

您只能在后期绑定视图中引用 Amazon Redshift Spectrum 外部表。后期绑定视图的一种应用是查询 Amazon Redshift和 Redshift Spectrum 表。例如,您可以使用 UNLOAD 命令将较旧的数据归档至 Amazon S3。然后,创建一个 Redshift Spectrum 外部表,该表引用 Amazon S3 中的数据并创建一个可查询这两个表的视图。以下示例使用 UNION ALL 子句来联接 Amazon Redshift SALES 表和 Redshift Spectrum SPECTRUM.SALES 表。

create view sales_vw as select * from public.sales union all select * from spectrum.sales with no schema binding;

有关创建 Redshift Spectrum 外部表 (包括 SPECTRUM.SALES 表) 的更多信息,请参阅Amazon Redshift Spectrum 入门

Examples

以下命令从名为 EVENT 的表创建一个名为 myevent 的视图。

create view myevent as select eventname from event where eventname = 'LeAnn Rimes';

以下命令从名为 USERS 的表创建一个名为 myuser 的视图。

create view myuser as select lastname from users;

以下命令从名为 USERS 的表创建或替换一个名为 myuser 的视图。

create or replace view myuser as select lastname from users;

以下示例创建一个没有 schema 绑定的视图。

create view myevent as select eventname from public.event with no schema binding;