Gabriel Asked: 2018-01-09 08:13:50 +0800 CST2018-01-09 08:13:50 +0800 CST 2018-01-09 08:13:50 +0800 CST 如何对 PostgreSQL 物化视图进行增量刷新? 772 我正在查看 PostgreSQL 文档,其中: REFRESH MATERIALIZED VIEW 完全替换了物化视图的内容。旧内容被丢弃。 但是,我相信从 9.5 开始,有一种方法可以更新 MV,而无需重新生成所有数据。 postgresql materialized-view 1 个回答 Voted Best Answer Evan Carroll 2018-01-09T08:51:53+08:002018-01-09T08:51:53+08:00 没有INCREMENTAL,这很简单..来自文档 REFRESH MATERIALIZED VIEW [ CONCURRENTLY ] name [ WITH [ NO ] DATA ] 也许您CONCURRENTLY对并发(锁定)而不是最小化更新感到困惑。 刷新物化视图而不锁定物化视图上的并发选择。如果没有此选项,影响大量行的刷新将倾向于使用更少的资源并更快地完成,但可能会阻止尝试从物化视图读取的其他连接。在少量行受到影响的情况下,此选项可能会更快。 如果您需要增量刷新,请使用表来存储结果并将其与源连接,仅插入以下行NOT EXISTS, INSERT INTO materialized_resultset SELECT foo,bar,baz FROM src WHERE NOT EXISTS ( SELECT 1 FROM materialized_resultset AS mr WHERE src.foo = mr.foo ); 或使用较新的ON CONFLICT UPDATE或ON CONFLICT DO NOTHING在INSERT.
没有
INCREMENTAL
,这很简单..来自文档也许您
CONCURRENTLY
对并发(锁定)而不是最小化更新感到困惑。如果您需要增量刷新,请使用表来存储结果并将其与源连接,仅插入以下行
NOT EXISTS
,或使用较新的
ON CONFLICT UPDATE
或ON CONFLICT DO NOTHING
在INSERT
.