On this page
Tip
vacuumdb
vacuumdb —垃圾收集和分析 PostgreSQL 数据库
Synopsis
vacuumdb [ connection-option ...] [ option ...] [ --table | -t table [( column [,...] )] ] ... [ dbname ]
vacuumdb [ connection-option ...] [ option ...] --all | -a
Description
vacuumdb 是用于清理 PostgreSQL 数据库的 Util。 vacuumdb 还将生成 PostgreSQL 查询优化器使用的内部统计信息。
vacuumdb 是 SQL 命令VACUUM的包装。通过此 Util 和其他访问服务器的方法对数据库进行清理和分析之间没有有效的区别。
Options
vacuumdb 接受以下命令行参数:
-a--all- 清理所有数据库。
[-d] dbname[--dbname=]dbname- 指定要清除或分析的数据库的名称。如果未指定此参数并且未使用
-a(或--all),则将从环境变量PGDATABASE中读取数据库名称。如果未设置,则使用为连接指定的用户名。
- 指定要清除或分析的数据库的名称。如果未指定此参数并且未使用
-e--echo- 回显 vacuumdb 生成并发送到服务器的命令。
-f--full- 执行“完全”吸尘。
-F--freeze- 积极地“冻结”Tuples。
-j njobs--jobs=njobs- 通过同时运行*
njobs*命令来并行执行真空或分析命令。该选项减少了处理时间,但同时也增加了数据库服务器上的负载。
- 通过同时运行*
vacuumdb 将打开* njobs *与数据库的连接,因此请确保max_connections设置足够高以容纳所有连接。
请注意,如果并行处理某些系统目录,则将此模式与-f(FULL)选项一起使用可能会导致死锁失败。
-q--quiet- 不显示进度消息。
-t table [ (column [,...]) ]--table=table [ (column [,...]) ]- 仅清除或分析
table*。只能与--analyze或--analyze-only选项一起指定列名。通过写入多个-t开关可以清理多个表。
- 仅清除或分析
Tip
如果指定列,则可能必须从 Shell 转义括号。 (请参见下面的示例.)
-v--verbose- 在处理过程中打印详细信息。
-V--version- 打印 vacuumdb 版本并退出。
-z--analyze- 还计算统计信息以供优化器使用。
-Z--analyze-only- 仅计算供优化程序使用的统计信息(无真空)。
--analyze-in-stages- 仅计算供优化程序使用的统计信息(无余量),例如
--analyze-only。使用不同的配置设置运行几个(当前三个)分析阶段,以更快地生成可用的统计信息。
- 仅计算供优化程序使用的统计信息(无余量),例如
此选项对于分析从还原的转储或pg_upgrade新填充的数据库很有用。此选项将尝试尽快创建一些统计信息,以使数据库可用,然后在后续阶段中生成完整的统计信息。
-?--help- 显示有关 vacuumdb 命令行参数的帮助,然后退出。
vacuumdb 还接受以下命令行参数作为连接参数:
-h host--host=host- 指定运行服务器的计算机的主机名。如果该值以斜杠开头,则将其用作 Unix 域套接字的目录。
-p port--port=port- 指定服务器正在侦听连接的 TCP 端口或本地 Unix 域套接字文件 extensions。
-U username--username=username- 连接的用户名。
-w--no-password- 切勿发出密码提示。如果服务器要求密码验证,而其他方式(例如
.pgpass文件)无法使用密码,则连接尝试将失败。该选项在没有用户 Importing 密码的批处理作业和脚本中很有用。
- 切勿发出密码提示。如果服务器要求密码验证,而其他方式(例如
-W--password- 强制 vacuumdb 在连接数据库之前提示 Importing 密码。
此选项从不是必需的,因为如果服务器要求密码验证,vacuumdb 会自动提示 Importing 密码。但是,vacuumdb 会浪费连接尝试,因为发现服务器需要密码。在某些情况下,值得 Importing-W以避免额外的连接尝试。
--maintenance-db=dbname- 指定要连接以发现应清除哪些其他数据库的数据库名称。如果未指定,将使用
postgres数据库,如果不存在,将使用template1。
- 指定要连接以发现应清除哪些其他数据库的数据库名称。如果未指定,将使用
Environment
PGDATABASEPGHOSTPGPORTPGUSER- 默认连接参数
与大多数其他 PostgreSQLUtil 一样,该 Util 也使用 libpq 支持的环境变量(请参见Section 33.14)。
Diagnostics
万一遇到困难,请参见VACUUM和psql以获取有关潜在问题和错误消息的讨论。数据库服务器必须在目标主机上运行。同样,libpq 前端库使用的任何默认连接设置和环境变量都将适用。
Notes
vacuumdb 可能需要多次连接到 PostgreSQL 服务器,每次都要求 Importing 密码。在这种情况下,拥有~/.pgpass文件很方便。有关更多信息,请参见Section 33.15。
Examples
清理数据库test:
$ vacuumdb test
要为优化器清理和分析名为bigdb的数据库:
$ vacuumdb --analyze bigdb
要在名为xyzzy的数据库中清除单个表foo,并为优化程序分析表的单个列bar:
$ vacuumdb --analyze --verbose --table='foo(bar)' xyzzy