Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在PostgreSQL中部分刷新物化视图?_Postgresql_Postgresql 9.3_Materialized Views - Fatal编程技术网

是否可以在PostgreSQL中部分刷新物化视图?

是否可以在PostgreSQL中部分刷新物化视图?,postgresql,postgresql-9.3,materialized-views,Postgresql,Postgresql 9.3,Materialized Views,。但是在PostgreSQL中,物化视图从9.3(现在的版本)开始就得到了支持,时间不长。所以我想知道:在PostgreSQL 9.3中,是否可以只刷新物化视图中的部分数据?如果是,怎么做?PostgreSQL还不支持物化视图的渐进/部分更新 9.4增加了,但仍需完全重新生成 如果有人足够热情,我们希望在9.5中看到支持。但是,对于简单的物化视图,只有在没有用户定义的触发器/规则的情况下才能做到这一点,甚至需要特殊的支持来处理计数(…)的增量更新之类的事情。。。分组依据… 不过,您提到的Orac

。但是在PostgreSQL中,物化视图从9.3(现在的版本)开始就得到了支持,时间不长。所以我想知道:在PostgreSQL 9.3中,是否可以只刷新物化视图中的部分数据?如果是,怎么做?

PostgreSQL还不支持物化视图的渐进/部分更新

9.4增加了,但仍需完全重新生成

如果有人足够热情,我们希望在9.5中看到支持。但是,对于简单的物化视图,只有在没有用户定义的触发器/规则的情况下才能做到这一点,甚至需要特殊的支持来处理
计数(…)的增量更新之类的事情。。。分组依据…


不过,您提到的Oracle答案实际上不是增量刷新。它是按分区刷新的。为了让PostgreSQL在本机上支持这一点,它首先必须支持真正的声明性分区,而事实并非如此,尽管我们正在讨论是否可以在9.5中实现它。

我刚刚遇到了一个类似的问题。从中了解到这是不可能的,我使用了一种变通方法。我解构了物化视图,并在
视图中连接和/或联合了各个部分:

  • 使用公共的
    id
    列等,为每个有问题的行或列组创建
    物化视图(
    material\u col1
    material\u col2
    ,等等),或在有条件的地方创建更复杂的间断视图
  • 使用常规的
    视图
    伪物化视图
    连接
    id
    列上的
    物化视图
    s表
    • 对于不相交的行,必须
      合并所有行
  • 根据需要刷新物化视图
  • 改为在
    伪物化视图上使用您的查询
  • 视图
    看起来有点像这样:

    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
    

    (Upd1:Thx感谢Barry利用行分区,我将其添加到了答案中。)

    你能举个例子说明你的意思吗?我认为拥有物化视图的目的是只显示部分数据。您为Oracle链接的答案不是很有说服力。它说您可以强制地将其中一个分区换成一个分区的MV。由于Postgresql中的分区不是真正的内置功能,而是您自己开发的功能,我想您也可以在Postgres中使用相同的方法。不幸的是,这只对“分区列”有用,对“分区行”没有帮助(不一定映射到简单的可定义分区,而是映射到单个行)@AndreasDietrich在一组物化视图上使用
    union all
    ,每个分区一个,如果分区列表相对固定,就可以正常工作。这在每个用例中都不会有帮助,但对于聚合的物化视图也可以。@n1000:嘿,我刚刚意识到,我编辑了你的答案,我以为是我的:/…对不起如果编辑不适合你…那么让我们还原它,我将发布一个自己的版本,并附带示例作为单独的答案。