更新时间:2024-06-03 GMT+08:00

CREATE MATERIALIZED VIEW

CREATE MATERIALIZED VIEW会创建一个全量物化视图,并且后续可以使用REFRESH MATERIALIZED VIEW(全量刷新)刷新物化视图的数据。

CREATE MATERIALIZED VIEW类似于CREATE TABLE AS,与后者相比它会记住被用来初始化该视图的查询, 因此它可以在后续中进行数据刷新。一个物化视图有很多和表相同的属性,但是不支持临时物化视图。

注意事项

  • 全量物化视图不可以在临时表或全局临时表上创建。
  • 全量物化视图不支持nodegroup。
  • 创建全量物化视图后,基表中的绝大多数DDL操作不再支持。
  • 不支持对全量物化视图进行IUD操作。
  • 全量物化视图创建后,当基表数据发生变化时,需要使用刷新(REFRESH)命令保持物化视图与基表同步。
  • Ustore引擎不支持物化视图的创建和使用。
  • 段页式不支持物化视图的创建和使用。

语法格式

CREATE MATERIALIZED VIEW mv_name
    [ (column_name [, ...] ) ]
    [ WITH ( {storage_parameter = value} [, ... ] ) ]
    [ TABLESPACE tablespace_name ]
    AS query
    [ WITH [ NO ] DATA ];

参数说明

  • mv_name

    要创建的物化视图的名称(可以被模式限定)。

    取值范围:字符串,要符合标识符命名规范

  • column_name

    新物化视图中的一个列名。物化视图支持指定列,指定列需要和后面的查询语句结果的列在数量上保持一致;如果没有提供列名,会从查询的输出列名中获取列名。

    取值范围:字符串,要符合标识符命名规范

  • WITH ( storage_parameter [= value] [, ... ] )

    该子句为表或索引指定一个可选的存储参数。详见CREATE TABLE

  • TABLESPACE tablespace_name

    指定新建物化视图所属表空间。如果没有声明,将使用默认表空间。

  • AS query

    一个SELECT、TABLE或者VALUES命令。这个查询将在一个安全受限的操作中运行。

示例

--修改默认表类型。
gaussdb=#  set enable_default_ustore_table=off;

--创建表空间。
gaussdb=# CREATE TABLESPACE tbs_data1 RELATIVE LOCATION 'tablespace1/tbs_data1';

--创建一个普通表。
gaussdb=# CREATE TABLE my_table (c1 int, c2 int);

--创建全量物化视图。
gaussdb=# CREATE MATERIALIZED VIEW my_mv TABLESPACE tbs_data1 AS SELECT * FROM my_table;

--基表写入数据。
gaussdb=# INSERT INTO my_table VALUES(1,1),(2,2);

--查询全量物化视图。
gaussdb=# SELECT * FROM my_mv;
 c1 | c2 
----+----
(0 rows)

--对全量物化视图my_mv进行全量刷新。
gaussdb=# REFRESH MATERIALIZED VIEW my_mv;

--查询全量物化视图。
gaussdb=# SELECT * FROM my_mv;
 c1 | c2 
----+----
  1 |  1
  2 |  2
(2 rows)

--删除全量物化视图。
gaussdb=# DROP MATERIALIZED VIEW my_mv;

--删除普通表my_table。
gaussdb=# DROP TABLE my_table;

--删除表空间。
gaussdb=# DROP TABLESPACE tbs_data1;