Pav*_* V. 16 postgresql materialized-views postgresql-9.3
在Oracle中,可以仅刷新部分数据.但是在PostgreSQL中,自9.3(现在的版本)支持物化视图,这不是很长.所以我想知道:是否可以刷新PostgreSQL 9.3中物化视图中的部分数据?如果是的话,该怎么办?
Cra*_*ger 22
PostgreSQL还不支持物化视图的渐进/部分更新.
9.4增加REFRESH MATERIALIZED VIEW CONCURRENTLY但仍然必须完全重新生成.
如果有人热情的话,我们希望能在9.5中得到支持.只有在没有用户定义的简单物化视图的触发器/规则的情况下才可能这样做,并且甚至需要特殊支持来处理诸如增量更新之类的事情count(...) ... GROUP BY ....
但是,您提到的Oracle答案实际上并不是增量刷新.它是按分区刷新的.为了让PostgreSQL本身支持它,它首先必须支持真正的声明性分区 - 尽管我们正在讨论它是否可以在9.5中完成.
我刚刚遇到了类似的问题。从Craig 的回答中了解到这是不可能的,我使用了一种解决方法。我解构了物化视图并将各个部分加入和/或联合在一个VIEW:
MATERIALIZED VIEW用于所讨论的每一行或列组(material_col1,material_col2等,或更复杂的间断,其中的条件),使用例如公共id列。VIEW(fake_materialized_view)join荷兰国际集团将MATERIALIZED VIEW在S表id列
union all他们必须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
-- in case of additional row partitioning, e.g.
-- UNION ALL SELECT m3.id, m3.col1, m3.col2
-- FROM material_col3 m3
Run Code Online (Sandbox Code Playgroud)
(更新 1:感谢 Barry使用行分区发表评论,我已将其添加到答案中。)
| 归档时间: |
|
| 查看次数: |
7150 次 |
| 最近记录: |