VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

ALTER MATERIALIZED VIEW

功能描述

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

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

注意事项

  • 该功能仅在数据库兼容模式为Oracle时支持(即数据库实例初始化时指定DBCOMPATIBILITY='A')。

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

  • 不支持更改物化视图结构。

语法格式

ALTER MATERIALIZED VIEW view_name NEVER REFRESH
ALTER MATERIALIZED VIEW view_name REFRESH FAST|COMPLETE|FORCE [ON DEMAND | ON COMMIT] [START WITH ... NEXT] 

参数说明

参数说明请参见CREATE MATERIALIZED VIEW的参数说明

示例

示例1 修改物化视图为自动刷新视图。

1、创建测试表并插入数据。

CREATE TABLE table_1163000(
col1 INT,
col2 VARCHAR(255),
col3 TEXT,
col4 INT
);
INSERT INTO table_1163000 values
(4, 'Apple', 'Red', 55),
(2, 'Banana', 'Yellow', 56),
(1, 'Cherry', 'Red', 45),
(3, 'Durian', 'Green', 35),
(5, 'Apple', 'black', 66),
(5, '', 'black', 66);

2、创建全量物化视图,视图查询测试表的部分列。

CREATE MATERIALIZED VIEW test_mv_ic_1163000 REFRESH COMPLETE AS SELECT col1, col2 FROM table_1163000;

3、修改全量物化视图为自动刷新视图,新增刷新时间和间隔。

ALTER MATERIALIZED VIEW test_mv_ic_1163000 REFRESH COMPLETE ON DEMAND START WITH SYSDATE NEXT SYSDATE + 1/1440;

4、向测试表中插入数据,并等待1分钟,全量数据将被刷新。

INSERT INTO TABLE_1163000 values(1, 'peach', 'red', 66);
--等待1分钟
BEGIN
dbms_lock.sleep(60);
END;
/

5、查看物化视图。

SELECT * FROM test_mv_ic_1163000;

返回结果为:

 col1 |  col2
------+--------
    4 | Apple
    2 | Banana
    1 | Cherry
    3 | Durian
    5 | Apple
    5 |
    1 | peach
(7 rows)

6、清理环境。

DROP MATERIALIZED VIEW test_mv_ic_1163000;
DROP TABLE table_1163000;

示例2 修改物化视图为ON COMMIT刷新方式,在事务提交的同时更新物化视图。

1、开启enable_on_commit_matview参数,支持设置ON COMMIT修饰物化视图,从而设置事务提交时更新物化视图。

修改enable_on_commit_matview参数后需要重启数据库生效,可执行vb_ctl restart

echo "enable_on_commit_matview=on" >> $PGDATA/postgresql.conf
vb_ctl restart

2、创建测试表并插入数据。

CREATE TABLE table_1163001(
col1 INT,
col2 VARCHAR(255),
col3 TEXT,
col4 INT
);
INSERT INTO table_1163001 values
(4, 'Apple', 'Red', 55),
(2, 'Banana', 'Yellow', 56),
(1, 'Cherry', 'Red', 45),
(3, 'Durian', 'Green', 35),
(5, 'Apple', 'black', 66),
(5, '', 'black', 66);

3、创建全量物化视图,视图查询测试表的部分列。

CREATE MATERIALIZED VIEW test_mv_ic_1163001 REFRESH COMPLETE AS SELECT col1, col2 FROM table_1163001;

4、修改全量物化视图为ON COMMIT刷新视图,即在事务提交的同时刷新物化视图。

ALTER MATERIALIZED VIEW test_mv_ic_1163001 REFRESH ON COMMIT;

5、向测试表中插入数据,并直接查看物化视图,全量数据将被刷新。

INSERT INTO table_1163001 VALUES(2, 'grape', 'purple', 55);
SELECT * FROM test_mv_ic_1163001;

返回结果为:

 col1 |  col2
------+--------
    4 | Apple
    2 | Banana
    1 | Cherry
    3 | Durian
    5 | Apple
    5 |
    2 | grape
(7 rows)

6、清理环境,对enable_on_commit_matview参数的修改在重启数据库后生效。

DROP MATERIALIZED VIEW test_mv_ic_1163001;
DROP TABLE table_1163001;
ALTER SYSTEM SET enable_on_commit_matview TO off;

相关链接

CREATE MATERIALIZED VIEWDROP MATERIALIZED VIEW