PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

REFRESH MATERIALIZED VIEW

REFRESH MATERIALIZED VIEW — 替换一个物化视图的内容

Synopsis

REFRESH MATERIALIZED VIEW [ CONCURRENTLY ] name
    [ WITH [ NO ] DATA ]

描述

REFRESH MATERIALIZED VIEW 会完全替换一个物化视图的内容。要执行这个命令,你必须对该物化视图拥有 MAINTAIN 特权。旧的内容会被丢弃。如果指定了 WITH DATA(或者是默认情况),将执行底层的查询来提供新数据,物化视图将处于可扫描状态。如果指定了 WITH NO DATA,则不会生成新数据,物化视图将处于不可扫描状态。

CONCURRENTLY 和 WITH NO DATA 不能同时指定。

参数

CONCURRENTLY

刷新物化视图时不会阻止对物化视图的并发选择。在没有这个选项的情况下,影响大量行的刷新往往会使用更少的资源并更快地完成,但可能会阻塞其他试图从该物化视图读取数据的连接。在受影响行数较少的情况下,这个选项可能更快。

只有当该物化视图上至少有一个只使用列名并且包含所有行的 UNIQUE 索引时,才允许这个选项;也就是说,该索引不能是表达式索引,也不能包含 WHERE 子句。

只有当物化视图已经被填充时才能使用这个选项。

即使使用了这个选项,对任何一个物化视图一次也只能运行一个 REFRESH。

name

要刷新的物化视图的名称(可以选择用模式限定)。

注记

如果物化视图的定义查询中有一个 ORDER BY 子句,那么物化视图的初始内容将按该顺序排列;但 REFRESH MATERIALIZED VIEW 并不保证保留这种排序。

在 REFRESH MATERIALIZED VIEW 运行期间,search_path 会被临时改为 pg_catalog, pg_temp。

示例

这个命令将使用物化视图定义中的查询,替换名为 order_summary 的物化视图的内容,并使其处于可扫描状态:

REFRESH MATERIALIZED VIEW order_summary;

这个命令将释放与物化视图 annual_statistics_basis 相关联的存储,并使其处于不可扫描状态:

REFRESH MATERIALIZED VIEW annual_statistics_basis WITH NO DATA;

兼容性

REFRESH MATERIALIZED VIEW 是 PostgreSQL 的扩展。

另请参阅

CREATE MATERIALIZED VIEW, ALTER MATERIALIZED VIEW, DROP MATERIALIZED VIEW