定义新的具体化视图。

语法

CREATE MATERIALIZED VIEW name     [build_clause][create_mv_refresh] AS subquery

其中build_clause为:

BUILD {IMMEDIATE | DEFERRED}

其中create_mv_refresh为:

REFRESH [COMPLETE] [ON DEMAND]

说明

CREATE MATERIALIZED VIEW 定义查询的视图,每次在查询中引用视图时不更新该视图。默认情况下,视图在创建时填充;您可以包括 BUILD DEFERRED 关键字以将视图的填充延后。

具体化视图可以是 schema 限定的;如果您在调用 CREATE MATERIALIZED VIEW 命令时指定 schema 名称,则将在指定的 schema 中创建视图。视图名称不得与同一 schema 中其他所有视图、表、序列或索引的名称相同。

说明 具体化视图是只读的,服务器不允许在视图上执行 INSERT、UPDATE 或 DELETE。

对视图中所引用表的访问权限由视图所有者的权限决定;视图的用户必须有权调用视图所使用的全部函数。

有关 Postgres REFRESH MATERIALIZED VIEW 命令的更多信息,请参见 PostgreSQL 核心文档

参数

参数 说明
name 要创建的视图的名称(可能是 schema 限定的)。
subquery 一个指定视图内容的 SELECT 语句。有关有效查询的更多信息,请参见 SELECT。
build_clause 包括 build_clause 以指定应何时填充视图。指定 BUILD IMMEDIATE 或 BUILD DEFERRED:
  • BUILD IMMEDIATE 指示服务器立即填充视图。这是默认行为。
  • BUILD DEFERRED 指示服务器稍后填充视图(在 REFRESH 操作期间)。
create_mv_refresh 包括 create_mv_refresh 子句以指定应何时更新具体化视图的内容。子句包含 REFRESH 关键字,后跟 COMPLETE 和/或 ON DEMAND,其中:
  • COMPLETE 指示服务器放弃当前内容,并在刷新具体化视图时,通过执行视图的定义查询来重新加载具体化视图。
  • ON DEMAND 指示服务器通过调用 DBMS_MVIEW 包或调用 Postgres REFRESH MATERIALIZED VIEW 语句来按需刷新具体化视图。这是默认行为。

示例

以下语句创建名为 dept_30 的具体化视图:

CREATE MATERIALIZED VIEW dept_30 BUILD IMMEDIATE AS SELECT * FROM emp WHERE deptno = 30;

该视图包含从 emp 表中检索的、在 30 部门中工作的所有员工的相关信息。