2015-11-06 78 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

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