2015-11-06 32 views
1

對於這個問題的緣故,我們假設物化視圖是用兩個表連接的。爲什麼刷新物化視圖併發阻塞插入/更新?

刷新此視圖併發地阻止所有更新/插入。這是爲了確保刷新視圖時數據是最新的。

但是,爲什麼我們不能在更新/插入時進行更新/插入操作,刷新後會有更新,並且在刷新過程中更新/插入操作可能會在下次刷新時反映出來。

阻止插入/更新的設計決定究竟是什麼?我在這裏錯過了什麼嗎?

+0

「*同時刷新此視圖會阻止所有更新/插入*」 - 您確定嗎?我在手冊中找不到任何說明(假設您正在討論插入_source_表) –

+0

從文檔[here](http://www.postgresql.org/docs/9.4/static/explicit- locking.html),同時刷新物化視圖獲得排他鎖,鎖定衝突將除了併發讀取之外的所有其他鎖。衝突的反過來就是我的問題。 –

+1

該鎖是在**物化視圖**上獲取的,而不是在源表上獲取的。 –

回答

1

這是一個微妙的。

它鎖定了物化視圖的自我。不是它引用的表格;它們不會被寫入鎖定,並且可能會繼續正常使用。

REFRESH MATERIALIZED VIEW CONCURRENTLY允許刷新繼續進行,而不會阻止SELECT在視圖更新時按照the manual進行更新。在更新一小部分大視圖時,它也可以表現得更好。

+0

啊!該文件困惑了我一下..感謝清理。 –