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
指定打开还是关闭所选选项。你可以写入
TRUE
、ON
或1
以启用该选项,以及FALSE
、OFF
或0
来禁用它。 在TRUE
被假定的情况下,*boolean
*值也可以被省略。 -
name
要清理的表、物化视图或者回滚段的名称(可以有模式修饰)。如果指定的表示一个分区表,则它所有的叶子分区也会被清理。
如果声明了VERBOSE
,VACUUM
会发出进度消息来表明当前正在处理哪个表。各种有关这些表的统计信息也会打印出来。
要清理一个表,操作者通常必须是表的拥有者或者超级用户。但是,数据库拥有者被允许清理他们的数据库中除了共享目录之外的所有表(对于共享目录的限制意味着一个真正的数据库范围的VACUUM
只能被超级用户执行)。VACUUM
将会跳过执行者不具备清理权限的表。
VACUUM
不能在一个事务块内被执行。
清理单一表onek
,并且打印出详细的清理活动报告:
VACUUM (VERBOSE) onek;
在 SQL 标准中没有VACUUM
语句。