使用并发刷新模拟PostgreSQL中的物化视图

时间:2014-03-17 23:23:55

标签: sql database postgresql materialized-views

我正在使用PostgreSQL 9.2.4,并希望模拟物化视图。有没有任何众所周知的方法,包括并发刷新?

2 个答案:

答案 0 :(得分:1)

PostgreSQL wiki - materialized views链接到两个基于触发器的实现。

一般的想法是在每个涉及的表上放置AFTER INSERT OR UPDATE OR DELETE ... FOR EACH ROW个触发器,对目标表进行部分更新。实施对视图的性质非常具体。

对于一些更复杂的视图,您无法进行部分更新,而是需要进行并发视图刷新。这通常涉及创建一个新表,填充它,提交,开始一个新事务,删除旧表,将新表重命名为旧表,然后重新提交。

答案 1 :(得分:-1)

Postgres从9.5开始,按照官方文档here中所述,支持并发刷新。但是,需要满足两个先决条件:

  1. 您必须在实例化视图上创建唯一索引
  2. 唯一索引必须包含实例化视图的所有记录。换句话说,您的create index命令中不能包含WHERE子句。

刷新实体化并发视图的命令如下:

REFRESH MATERIALIZED VIEW CONCURRENTLY *mat_view_name*;

请注意,同时刷新实例化视图的速度要比正常刷新慢。但是,这将确保在并发刷新期间,您对实例化视图的所有查询都不会被阻止。