暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

opengauss物化视图MATERIALIZED VIEW

原创 墨天轮 2020-11-26
2805

CREATE MATERIALIZED VIEW

功能描述

CREATE MATERIALIZED VIEW 定义一个查询的物化视图。 在该命令被发出时,查询会被执行并且被用来填充该视图(除非使用了 WITH NO DATA),并且后来可能会用 REFRESH MATERIALIZED VIEW进行刷新;CREATE MATERIALIZED VIEW类似于 CREATE TABLE AS,不过它还会记住被用来初始化该视图的查询, 这样它可以在后来被命令刷新。一个物化视图有很多和表相同的属性,但是不支持临时物化视图。

注意事项

  • 物化视图不可以在临时表或全局临时表上创建。
  • 物化视图创建后,当基表数据发生变化时,需要使用刷新(REFRESH)命令保持物化视图与基表同步。

语法格式

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支持的参数CREATE MATERIALIZED VIEW也支持,不过OIDS除外。详见CREATE TABLE

  • TABLESPACE tablespace_name

    指定新物化视图将要在tablespace_name表空间内创建。如果没有声明,将使用默认表空间。

  • AS query

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

  • [ WITH [ NO ] DATA ]

    创建物化视图时,是否也插入查询到的数据。默认是要数据,选择“NO”参数时,则不要数据。

示例

--创建一个表tpcds.store_returns表。
postgres=# CREATE TABLE tpcds.store_returns
(
    W_WAREHOUSE_SK            INTEGER               NOT NULL,
    W_WAREHOUSE_ID            CHAR(16)              NOT NULL,
    sr_item_sk                VARCHAR(20)                   ,
    W_WAREHOUSE_SQ_FT         INTEGER                       
);
--以tpcds.store_returns表为基表创建一个物化视图tpcds.store_returns_mv。
postgres=# CREATE MATERIALIZED VIEW tpcds.store_returns_mv AS SELECT * FROM tpcds.store_returns';

--使用tpcds.store_returns拷贝一个新表tpcds.store_returns_mv2作为一个物化视图。
postgres=# CREATE MATERIALIZED VIEW tpcds.store_returns_mv2 AS table tpcds.store_returns;

--删除物化视图。
postgres=# DROP MATERIALIZED VIEW tpcds.store_returns_mv cascade;

PG_MATVIEWS

PG_MATVIEWS视图提供了关于数据库中每一个物化视图的信息。

表 1 PG_MATVIEWS字段

名称

类型

引用

描述

schemaname

name

PG_NAMESPACE.nspname

包含物化视图的模式名。

matviewname

name

PG_CLASS.relname

物化视图名。

matviewowner

name

PG_AUTHID.Erolname

物化视图的所有者。

tablespace

name

PG_TABLESPACE.spcname

包含物化视图的表空间名(如使用数据库默认表空间则为空)。

hasindexes

boolean

-

如果物化视图有(或者最近有过)任何索引,则此列为真。

definition

text

-

物化视图的定义(一个重构的SELECT查询)。

REFRESH MATERIALIZED VIEW

功能描述

REFRESH MATERIALIZED VIEW 完全替换一个 物化视图的内容。旧的内容会被抛弃。

注意事项

  • 如果指定了 WITH DATA(或者作为默认值),支持查询将被执行以提供新的数据。如果指定了WITH NO DATA,则不会生成新数据。
  • 如果希望数据在产生时排序,必须在支持查询中使用ORDER BY子句。

语法格式

  • 查询数据
REFRESH MATERIALIZED VIEW mv_name [ WITH [ NO ] DATA ];

参数说明

  • mv_name

    要刷新的物化视图的名称。

示例

--这个命令将使用物化视图order_summary定义中的查询来替换该物化视图的内容:
postgres=# REFRESH MATERIALIZED VIEW order_summary;

DROP MATERIALIZED VIEW

功能描述

数据库中强制删除已有的物化视图。

注意事项

只有物化视图的所有者有权限执行DROP MATERIALIZED VIEW的命令,系统管理员默认拥有此权限。

语法格式

DROP MATERIALIZED VIEW [ IF EXISTS ] mv_name [, ...] [ CASCADE | RESTRICT ];

参数说明

  • IF EXISTS

    如果指定的物化视图不存在,则发出一个notice而不是抛出一个错误。

  • mv_name

    要删除的物化视图名称。

  • CASCADE | RESTRICT

    • CASCADE:级联删除依赖此物化视图的对象。
    • RESTRICT:如果依赖对象存在,则拒绝删除此物化视图。此选项为缺省值。

示例

--这个命令将移除名为order_summary的物化视图:
postgres=# DROP MATERIALIZED VIEW order_summary;

ALTER MATERIALIZED VIEW

功能描述

更改一个现有物化视图的多个辅助属性。

可用于ALTER MATERIALIZED VIEW的语句形式和动作是ALTER TABLE的一个子集,并且在用于物化视图时具有相同的含义。详见ALTER TABLE

注意事项

  • 只有物化视图的所有者有权限执行ALTER TMATERIALIZED VIEW命令,系统管理员默认拥有此权限。
  • 不支持更改物化视图结构。

语法格式

  • 修改物化视图的定义。

    ALTER MATERIALIZED VIEW [ IF EXISTS ] mv_name 
    	action [, ... ];
    
  • 修改物化视图的列。

    ALTER MATERIALIZED VIEW [ IF EXISTS ] mv_name 
    	RENAME [ COLUMN ] column_name TO new_column_name;
    
  • 重命名物化视图。

    ALTER MATERIALIZED VIEW [ IF EXISTS ] mv_name 
    	RENAME TO new_name;
    
  • 设置物化视图的所属模式。

    ALTER MATERIALIZED VIEW [ IF EXISTS ] mv_name 
    	SET SCHEMA new_schema;
    
  • 设置物化视图的表空间。

    ALTER MATERIALIZED VIEW mv_name [ IF EXISTS ]
    	SET TABLESPACE new_tablespace;
    
  • 其中具体表操作action可以是以下子句之一:

    ALTER [ COLUMN ] column_name SET STATISTICS integer
    ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] )
    ALTER [ COLUMN ] column_name SET ( attribute_option = value [, ... ] )
    ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }
    CLUSTER ON index_name
    SET WITHOUT CLUSTER
    SET ( storage_parameter = value [, ... ] )
    OWNER TO { new_owner }
    RESET ( storage_parameter [, ... ] )
    

参数说明

  • mv_name

    一个现有物化视图的名称,可以用模式修饰。

  • column_name

    一个新的或者现有的。

  • new_column_name

    一个现有列的新名称。

  • new_owner

    该物化视图的新拥有者的用户名。

  • new_name

    该物化视图的新名称。

  • new_schema

    该物化视图的新模式。

示例

--把物化视图foo重命名为bar。
postgres=# ALTER MATERIALIZED VIEW foo RENAME TO bar;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论