相关疑难解决方法(0)

334
推荐指数
8
解决办法
65万
查看次数

使用规则或通知自动刷新实例化视图

我在PostgreSQL 9.3数据库上有一个物化视图,该数据库很少发生变化(大约每天两次).但是当它发生时,我想及时更新其数据.

以下是我到目前为止的想法:

有一个物化视图mat_view,它从表中获取数据table1table2使用一些连接语句.

无论何时进入table1table2更改,我已经有一个触发器更新一个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 …

postgresql triggers materialized-views postgresql-9.3

60
推荐指数
2
解决办法
4万
查看次数