【发布时间】:2023-03-16 00:11:01
【问题描述】:
REFRESH MATERIALIZED VIEW 上的 PostgreSQL 9.3 官方文档尚未详细描述。
引用此blog:
Postgres 9.3 中的物化视图有一个严重的限制,即刷新时使用排他锁。这基本上阻止了在使用来自其父关系的新数据进行刷新时读取物化视图的任何尝试
mailing list 中帖子的另一句话:
如果我理解正确,REFRESH MATERIALIZED VIEW 将锁定 具有 AccessExclusiveLock 的物化视图,即使该视图已经 包含数据。
我的问题:以下顺序是否正确:
- 查询正在访问物化视图
- 作业执行
REFRESH MATERIALIZED VIEW。它会锁定视图,并等待所有使用 matview 运行的查询都已完成 - matview 正在开始刷新;如果 matview 上有索引,则同时更新(因此完全刷新发生在一个事务中)
- 使用 matview 的查询正在等待刷新完成。如果这花费的时间过长,则会出现“等待锁定超时错误”之类的情况。
- 刷新完成,解除锁定
- 一直在等待 matview 的查询继续
【问题讨论】:
标签: postgresql materialized-views postgresql-9.3