In Oracle, it is possible to refresh just part of the data。但是在PostgreSQL中,自9.3(现在的版本)支持物化视图,这不是很长。所以我想知道:是否可以刷新PostgreSQL 9.3中物化视图中的部分数据?如果是的话,该怎么做?
答案 0 :(得分:21)
PostgreSQL还不支持实体化视图的渐进式/部分更新。
9.4添加REFRESH MATERIALIZED VIEW CONCURRENTLY
但仍需完全重新生成。
希望如果有人热情的话,我们会看到9.5的支持。只有在没有用户定义的简单物化视图的触发器/规则的情况下才能执行此操作,并且甚至需要特殊支持来处理诸如count(...) ... GROUP BY ...
的增量更新之类的事情。
但是,您提到的Oracle答案实际上并不是增量刷新。它是按分区刷新的。为了让PostgreSQL本身支持它,它首先必须支持真正的声明性分区 - 尽管我们正在讨论它是否可以在9.5中完成。
答案 1 :(得分:4)
我刚遇到类似的问题。从Craig's answer学习,这是不可能的,我使用了一种解决方法。我解构了物化视图,并在VIEW
:
MATERIALIZED VIEW
列为相关列(material_col1
,material_col2
等)创建id
。VIEW
(fake_materialized_view
)加入MATERIALIZED VIEW
列上的id
表格REFRESH MATERIALIZED VIEW
根据需要fake_materialized_view
上使用您的查询 VIEW
看起来有点像这样:
CREATE VIEW fake_materialized_view AS
SELECT m1.id, m1.col1, m2.col2
FROM material_col1 as m1 LEFT JOIN
material_col2 as m2
ON m1.id = m2.id;