Oracle中的视图和物化视图有什么区别?
我在PostgreSQL 9.3数据库上有一个物化视图,该数据库很少发生变化(大约每天两次).但是当它发生时,我想及时更新其数据.
以下是我到目前为止的想法:
有一个物化视图mat_view,它从表中获取数据table1并table2使用一些连接语句.
无论何时进入table1或table2更改,我已经有一个触发器更新一个config由...组成的配置表
table_name | mat_view_name | need_update
-----------+---------------+------------
table1 | mat_view | TRUE/FALSE
table2 | mat_view | TRUE/FALSE
Run Code Online (Sandbox Code Playgroud)
因此,如果有任何table1更改(每个语句的UPDATE和DELETE都有触发器),need_update则第一行中的字段设置为TRUE.同样适用table2于第二行.
显然,如果need_update为TRUE,则必须刷新实体化视图.
更新:由于物化视图不支持规则(如下面评论中提到的@pozs),我会更进一步.我创建了一个v_mat_view带有定义" SELECT * FROM mat_view" 的虚拟视图.当用户在此视图上执行SELECT时,我需要创建一个ON SELECT规则,它执行以下操作:
mat_view应该更新(SELECT 1 FROM config WHERE mat_view_name='mat_view' AND need_update=TRUE)need_update标志UPDATE config SET need_update=FALSE where mat_view_name='mat_view'REFRESH MATERIALIZED VIEW …