對於這個問題的緣故,我們假設物化視圖是用兩個表連接的。爲什麼刷新物化視圖併發阻塞插入/更新?
刷新此視圖併發地阻止所有更新/插入。這是爲了確保刷新視圖時數據是最新的。
但是,爲什麼我們不能在更新/插入時進行更新/插入操作,刷新後會有更新,並且在刷新過程中更新/插入操作可能會在下次刷新時反映出來。
阻止插入/更新的設計決定究竟是什麼?我在這裏錯過了什麼嗎?
對於這個問題的緣故,我們假設物化視圖是用兩個表連接的。爲什麼刷新物化視圖併發阻塞插入/更新?
刷新此視圖併發地阻止所有更新/插入。這是爲了確保刷新視圖時數據是最新的。
但是,爲什麼我們不能在更新/插入時進行更新/插入操作,刷新後會有更新,並且在刷新過程中更新/插入操作可能會在下次刷新時反映出來。
阻止插入/更新的設計決定究竟是什麼?我在這裏錯過了什麼嗎?
這是一個微妙的。
它鎖定了物化視圖的自我。不是它引用的表格;它們不會被寫入鎖定,並且可能會繼續正常使用。
REFRESH MATERIALIZED VIEW CONCURRENTLY
允許刷新繼續進行,而不會阻止SELECT
在視圖更新時按照the manual進行更新。在更新一小部分大視圖時,它也可以表現得更好。
啊!該文件困惑了我一下..感謝清理。 –
「*同時刷新此視圖會阻止所有更新/插入*」 - 您確定嗎?我在手冊中找不到任何說明(假設您正在討論插入_source_表) –
從文檔[here](http://www.postgresql.org/docs/9.4/static/explicit- locking.html),同時刷新物化視圖獲得排他鎖,鎖定衝突將除了併發讀取之外的所有其他鎖。衝突的反過來就是我的問題。 –
該鎖是在**物化視圖**上獲取的,而不是在源表上獲取的。 –