In Oracle, it is possible to refresh just part of the data。但是在PostgreSQL中,物化视图自9.3(现在的版本)开始支持,并不长。所以我想知道:是否可以刷新PostgreSQL 9.3中物化视图中的部分数据?如果是的话,该怎么做?是否可以部分刷新PostgreSQL中的物化视图?
回答
PostgreSQL不支持物化视图的渐进/部分更新。
9.4增加REFRESH MATERIALIZED VIEW CONCURRENTLY
但它仍然必须完全重新生成。
希望如果有人足够热心,我们会在9.5中看到支持。尽管如此,只有通过用户定义的触发器/规则才能实现这个功能,并且需要特殊的支持来处理诸如count(...) ... GROUP BY ...
的增量更新之类的事情。
但是,您引用的Oracle答案实际上并不是实际的增量刷新。这是分区刷新。为了支持PostgreSQL本身,它首先必须支持真正的声明式分区 - 虽然我们正在讨论它是否可以在9.5中完成,但它不支持。
我刚碰到类似的问题。从Craig's answer学习,这是不可能的,我使用了一种解决方法。我解构物化视图和在VIEW
接合的各个部分:
- 对于所讨论的每一列(
material_col1
,material_col2
等)创建MATERIALIZED VIEW
,使用通用id
柱。 - 使用常规
VIEW
(fake_materialized_view
)在id
列加入MATERIALIZED VIEW
小号表 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;
不幸的是,这只对“分区列”有帮助,而不是“分区行”(不一定映射到简单的可定义分区,而是映射到单个行) – 2016-03-21 19:20:59
@AndreasDietrich我想你可以用'UNION ALL'做类似的事情。 .. – n1000 2016-03-23 14:32:19
- 1. 是否可以部分刷新Oracle中的物化视图?
- 2. PostgreSQL物化视图刷新“堆栈”
- 3. pgsql物化视图刷新
- 4. 刷新物化视图
- 5. PostgreSQL物化视图
- 6. 是否可以嵌套部分视图?
- 7. 每隔1分钟快速刷新物化视图是否存在问题?
- 8. Oracle禁用物化视图刷新
- 9. 刷新现有物化视图
- 10. 如何刷新在Oracle物化视图
- 11. 物化视图 - 识别上次刷新
- 12. 物化视图刷新从Informatica
- 13. Postgres如何刷新物化视图?
- 14. oracle物化视图刷新时间
- 15. Dokku + Postgres:如何刷新物化视图?
- 16. 物化视图刷新致力
- 17. 是否可以在物化视图中更改列类型?
- 18. 是否可以在openerp中自动刷新树视图?
- 19. 创建每隔5分钟刷新一次的物化视图
- 20. 是否有任何选项可以暂时停止oracle中几小时的物化视图刷新
- 21. 基于非快速刷新视图的快速刷新物化视图
- 22. Cassandra - 是否可以更新同样用于物化视图PK的表格列?
- 23. 是否可以在局部视图中加载局部视图?
- 24. 物化视图在PHP中作为外部任务在外部刷新。是否需要?
- 25. 恢复PostgreSQL的物化视图
- 26. 在PostgreSQL的物化视图慢查询
- 27. postgresql 9.5 - 当父母同时刷新时锁定子物化视图
- 28. 是否可以部分更新RealmObject
- 29. 刷新数据库事务中的物化视图
- 30. ASP.NET MVC - 部分视图不刷新
你能举一个你的意思吗?我认为拥有物化视图的重点只是显示部分数据。 – Lucas 2014-09-03 09:54:49
与甲骨文链接的答案并不十分引人注目。它说你可以强制换出分区MV的一个分区。由于Postgresql中的分区并不是真正的内置功能,而是您自己推出的东西,所以我想您也可以在Postgres中使用相同的方法。 – Thilo 2014-09-03 09:58:22