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字段
PG_NAMESPACE.nspname |
|||
PG_CLASS.relname |
|||
PG_AUTHID.Erolname |
|||
PG_TABLESPACE.spcname |
|||
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;




