在PostgreSQL中通过并发刷新模拟实例化视图

问题描述 投票:0回答:2

我正在使用PostgreSQL 9.2.4,并且希望模拟一个实例化视图。是否有任何知名的方法可以做到这一点,包括并发刷新?

sql database postgresql materialized-views
2个回答
1
投票

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

一般的想法是在每个涉及的表上放置AFTER INSERT OR UPDATE OR DELETE ... FOR EACH ROW触发器,以对目标表进行部分更新。实现是相当特定于视图的性质的。

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


0
投票

从9.5开始,Postgres支持并发刷新,如官方文档中的here所述。但是,这样做必须满足两个先决条件:

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

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

REFRESH MATERIALIZED VIEW CONCURRENTLY *mat_view_name*;

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

© www.soinside.com 2019 - 2024. All rights reserved.