是否有可能部分刷新PostgreSQL中的物化视图?

时间:2014-09-03 09:50:36

标签: postgresql postgresql-9.3 materialized-views

In Oracle, it is possible to refresh just part of the data。但是在PostgreSQL中,自9.3(现在的版本)支持物化视图,这不是很长。所以我想知道:是否可以刷新PostgreSQL 9.3中物化视图中的部分数据?如果是的话,该怎么做?

2 个答案:

答案 0 :(得分:21)

PostgreSQL还不支持实体化视图的渐进式/部分更新。

9.4添加REFRESH MATERIALIZED VIEW CONCURRENTLY但仍需完全重新生成。

希望如果有人热情的话,我们会看到9.5的支持。只有在没有用户定义的简单物化视图的触发器/规则的情况下才能执行此操作,并且甚至需要特殊支持来处理诸如count(...) ... GROUP BY ...的增量更新之类的事情。

但是,您提到的Oracle答案实际上并不是增量刷新。它是按分区刷新的。为了让PostgreSQL本身支持它,它首先必须支持真正的声明性分区 - 尽管我们正在讨论它是否可以在9.5中完成。

答案 1 :(得分:4)

我刚遇到类似的问题。从Craig's answer学习,这是不可能的,我使用了一种解决方法。我解构了物化视图,并在VIEW

中加入了各个部分
  1. 使用常用MATERIALIZED VIEW列为相关列(material_col1material_col2等)创建id
  2. 使用常规VIEWfake_materialized_view)加入MATERIALIZED VIEW列上的id表格
  3. REFRESH MATERIALIZED VIEW根据需要
  4. fake_materialized_view上使用您的查询
  5. 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;