Redrock Postgres 文档
主页 切换暗/亮/自动模式 切换暗/亮/自动模式 切换暗/亮/自动模式 返回首页

VACUUM

VACUUM — 清理一个数据库

语法

VACUUM [ ( option [, ...] ) ] [ name [, ...] ]
VACUUM [ VERBOSE ] [ name [, ...] ]

其中option可以是下列之一:
    VERBOSE [ boolean ]
    SKIP_LOCKED [ boolean ]
    TRUNCATE [ boolean ]

描述

VACUUM可以用来执行以下操作:

  • 扫描和清理表中的页面,尝试截断表末尾的任何空页,并允许将截断页的磁盘空间返回到操作系统
  • 尝试收缩回滚段
  • 清理回收站中的已删除对象

在没有*name*列表的情况下,VACUUM会处理当前用户具有清理权限的当前数据库中的每一个表、物化视图、回滚段,和回收站中的已删除对象。如果给出一个列表,VACUUM可以只处理列表中的那些表。

当选项列表被包围在圆括号中时,选项可以被写成任何顺序。如果没有圆括号,选项必须严格按照上面所展示的顺序指定。

参数

  • VERBOSE

    为每个表打印一份详细的清理活动报告。

  • SKIP_LOCKED

    规定VACUUM在开始处理关系时不等待任何冲突锁被释放:如果关系不能立即锁定而不等待,则跳过关系。 请注意即使采用此选项,VACUUM在打开关系的索引时仍可能阻塞。还有,虽然VACUUM通常处理指定分区表的所有分区,但如果分区表上的锁冲突, 此选项将导致VACUUM跳过所有分区。

  • TRUNCATE

    指定VACUUM尝试截断表末尾的任何空页,并允许将截断页的磁盘空间返回到操作系统。 这通常是所需的行为,并且是默认行为,除非将vacuum_truncate选项设置为 false,对要被清空的表。 将此选项设置为 false,可能有助于避免ACCESS EXCLUSIVE锁定需要截断的表。

  • boolean

    指定打开还是关闭所选选项。你可以写入TRUEON1以启用该选项,以及FALSEOFF0来禁用它。 在TRUE被假定的情况下,*boolean*值也可以被省略。

  • name

    要清理的表、物化视图或者回滚段的名称(可以有模式修饰)。如果指定的表示一个分区表,则它所有的叶子分区也会被清理。

输出

如果声明了VERBOSEVACUUM会发出进度消息来表明当前正在处理哪个表。各种有关这些表的统计信息也会打印出来。

注解

要清理一个表,操作者通常必须是表的拥有者或者超级用户。但是,数据库拥有者被允许清理他们的数据库中除了共享目录之外的所有表(对于共享目录的限制意味着一个真正的数据库范围的VACUUM只能被超级用户执行)。VACUUM将会跳过执行者不具备清理权限的表。

VACUUM不能在一个事务块内被执行。

例子

清理单一表onek,并且打印出详细的清理活动报告:

VACUUM (VERBOSE) onek;

兼容性

在 SQL 标准中没有VACUUM语句。