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 VIEW,DROP MATERIALIZED VIEW