定义一个新的物化视图。

语法

CREATE MATERIALIZED VIEW name
[build clause][create mv refresh] AS subquery

其中build_clause是:

BUILD {IMMEDIATE | DEFERRED}    

其中create mv refresh是:

REFRESH [COMPLETE] [ON DEMAND]

参数

参数名称 描述
name 要创建的视图名称(可以采用模式限定的方式引用)。
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语句。这是一种缺省行为。

描述

create materialized view定义了一个查询视图。这个查询视图不会因为每次在查询中被引用而更新。通过缺省,在创建视图时,这个视图会自动填充信息。您可以包括关键字build deferred来延迟视图的填充。

物化视图可以采用模式限定的方式引用。 如果在调用create materialized view命令时,您指定了一个模式名,那么这个视图就会创建于指定的模式中。所创建的视图名必须区别于相同模式下的其它任何视图、表、序列或索引。

说明
  • 物化视图为只读模式,也就是说服务器不允许对物化视图进行insert、update或delete操作。
  • 能否访问视图中引用的表,是由视图的拥有者来决定的。视图用户必须有授权才能够调用视图所使用的全部函数。
  • 更多关于Postgres refresh materialized view命令的信息,请参见PostgreSQL 核心文档

示例

下列语句创建了名为dept_30的物化视图:

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