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. PostgreSQL的物化視圖是由自身刷新
- 4. 獲取Oracle物化視圖以刷新
- 5. 刷新物化視圖
- 6. 物化視圖不刷新
- 7. pgsql物化視圖刷新
- 8. 如何一次刷新Postgresql 9.3中的所有物化視圖?
- 9. PostgreSQL物化視圖
- 10. 是否可以嵌套部分視圖?
- 11. 每隔1分鐘快速刷新物化視圖是否存在問題?
- 12. Ajax刷新部分視圖
- 13. 是否可以在物化視圖中更改列類型?
- 14. Dokku + Postgres:如何刷新物化視圖?
- 15. Oracle禁用物化視圖刷新
- 16. Postgres如何刷新物化視圖?
- 17. 刷新現有物化視圖
- 18. 物化視圖刷新從Informatica
- 19. 歷史刷新物化視圖
- 20. 物化視圖刷新致力
- 21. 物化視圖停止刷新
- 22. oracle物化視圖刷新時間
- 23. 如何刷新在Oracle物化視圖
- 24. 物化視圖 - 識別上次刷新
- 25. 刷新MVC中的部分視圖3
- 26. 是否可以在openerp中自動刷新樹視圖?
- 27. 是否有任何選項可以暫時停止oracle中幾小時的物化視圖刷新
- 28. 創建每隔5分鐘刷新一次的物化視圖
- 29. 基於非快速刷新視圖的快速刷新物化視圖
- 30. Cassandra - 是否可以更新同樣用於物化視圖PK的表格列?
你能舉一個你的意思嗎?我認爲擁有物化視圖的重點只是顯示部分數據。 – Lucas 2014-09-03 09:54:49
與甲骨文鏈接的答案並不十分引人注目。它說你可以強制換出分區MV的一個分區。由於Postgresql中的分區並不是真正的內置功能,而是您自己推出的東西,所以我想您也可以在Postgres中使用相同的方法。 – Thilo 2014-09-03 09:58:22