CREATE MATERIALIZED VIEW

定义一个新的物化视图。

概要

CREATE MATERIALIZED VIEW [ IF  NOT EXISTS ] <table_name>
    [ (<column_name> [, ...] ) ]
    [ USING <method> ]
    [ WITH ( <storage_parameter> [= <value>] [, ... ] ) ]
    [ TABLESPACE <tablespace_name> ]
    AS <query>
    [ WITH [ NO ] DATA ]
    [DISTRIBUTED {| BY <column> [<opclass>], [ ... ] | RANDOMLY | REPLICATED }]

描述

CREATE MATERIALIZED VIEW 定义查询的物化视图。该查询在执行命令时运行并用于填充视图(除非使用 WITH NO DATA),后续可通过 REFRESH MATERIALIZED VIEW 刷新。

CREATE MATERIALIZED VIEWCREATE TABLE AS 类似,但额外保存了初始化视图所用的查询,以便后续按需刷新。刷新物化视图数据时需使用 REFRESH MATERIALIZED VIEW 命令。物化视图具有与表相似的多数属性,但不支持临时物化视图。

参数

  • IF NOT EXISTS
    • 若已存在同名物化视图,则不应抛出异常。此时将发出通知。请注意,无法保证现有物化视图与本应创建的视图具有任何相似性。
  • table_name
    • 要创建的物化视图的名称(可选带模式限定)。
  • column_name
    • 新物化视图中列的名称。列名根据位置分配:第一个列名分配给查询结果的第一个列,依此类推。若未提供列名,则从查询的输出列名中获取。
  • USING method
    • 此可选子句指定用于存储新物化视图内容的表访问方法;该方法必须是类型为TABLE的访问方法。若未指定此选项,则为新物化视图选择默认表访问方法。更多信息请参阅default_table_access_method。
  • WITH ( storage_parameter [= value] [, ... ] )
    • 本子句指定了物化视图的可选存储参数。所有支持CREATE TABLE的参数同样支持CREATE MATERIALIZED VIEW。更多信息请参阅CREATE TABLE
  • TABLESPACE tablespace_name
    • tablespace_name 是用于创建新物化视图的表空间名称。若未指定,则采用服务器配置参数 default_tablespace 的值。
  • query
    • 一个 SELECTTABLEVALUES 命令。此查询将在受安全限制的操作中运行;特别是,对自身会创建临时表的函数的调用将失败。
  • WITH [ NO ] DATA
    • 本子句用于指定在创建时是否为物化视图填充数据。默认值为WITH DATA,即填充物化视图数据。若指定WITH NO DATA,则物化视图不会被填充数据,会被标记为不可扫描,且必须使用REFRESH MATERIALIZED VIEW语句填充数据后才能进行查询。
  • DISTRIBUTED BY (column [opclass], [ ... ] )
  • DISTRIBUTED RANDOMLY
  • DISTRIBUTED REPLICATED
    • 用于声明物化视图数据的数据库分布策略。有关表分布策略的信息,请参阅CREATE TABLE

      注意

      物化视图为只读视图。系统不允许对物化视图执行插入、更新或删除操作。请使用REFRESH MATERIALIZED VIEW语句更新物化视图数据。

若需生成时对数据进行排序,必须在物化视图查询中使用ORDER BY子句。但需注意:当物化视图查询包含ORDER BY或SORT子句时,若直接对物化视图执行SELECT操作,则无法保证数据的排序或排序状态。

示例

创建一个包含所有喜剧电影的视图:

CREATE MATERIALIZED VIEW comedies AS SELECT * FROM films 
WHERE kind = 'comedy';

这将创建一个包含视图创建时电影表中列的视图。尽管使用了*来创建物化视图,但后续添加到表中的列不会成为该视图的一部分。

创建一个视图,获取排名前十的婴儿名字:

CREATE MATERIALIZED VIEW topten AS SELECT name, rank, gender, year FROM 
names, rank WHERE rank < '11' AND names.id=rank.id;

兼容性

CREATE MATERIALIZED VIEW 是 SQL 标准的数据库扩展。

另见

SELECT, VALUES, CREATE VIEW, ALTER MATERIALIZED VIEW, DROP MATERIALIZED VIEW, REFRESH MATERIALIZED VIEW