PostgreSQL 19版本中的 vacuumdb 命令行工具迎来了一个重要更新,新增了 --dry-run(空运行/模拟运行)选项。vacuumdb 是用于对PostgreSQL数据库进行清理(VACUUM)和分析(ANALYZE)操作的实用程序。
此次新增的 --dry-run 选项为用户提供了一个“预览”模式,其核心作用包含两点:
- 打印命令,但不执行:启用该选项后,
vacuumdb 会打印出所有它原本计划发送给 PostgreSQL 服务器执行的 VACUUM 和 ANALYZE 命令。
- 不进行实际操作:在此模式下,这些 SQL 命令不会被真正发送到服务器执行,因此不会对数据库产生任何实际的清理或分析影响,实现了操作前的“干湿分离”。
核心代码变更
此次功能补丁主要涉及以下几个核心文件的修改:
src/bin/scripts/vacuumdb.c 与 src/bin/scripts/vacuuming.h:
- 在
vacuumdb 程序的选项解析逻辑中加入了对 --dry-run 的支持。
- 在
vacuumingOptions 结构体中新增了 dry_run 标志位。
- 当启用
dry-run 模式时,程序会输出提示信息,告知用户当前处于模拟运行状态,且不会向服务器发送命令。
src/bin/scripts/vacuuming.c:
- 修改了负责发送 VACUUM 和 ANALYZE 命令的
run_vacuum_command 函数。
- 新增判断逻辑:如果
dry_run 标志为真,则仅打印 SQL 命令(若同时启用了 echo 选项),而不会调用 PQsendQuery 将命令经由数据库连接发送出去。
doc/src/sgml/ref/vacuumdb.sgml:
- 更新了
vacuumdb 的官方手册页,增加了关于 --dry-run 选项的详细说明。
src/bin/scripts/t/100_vacuumdb.pl:
- 新增了相应的测试用例,以确保
--dry-run 选项能正确打印预期命令,同时验证其不会实际执行这些操作。
功能价值总结
--dry-run 选项的引入极大地提升了数据库运维操作的安全性和可控性。在进行大规模的数据库维护任务(如全库VACUUM/ANALYZE)之前,管理员可以先用此模式预览即将执行的所有命令。这有助于检查和验证操作范围、参数设置是否准确,从而有效避免因误操作导致的潜在风险或不必要的系统资源消耗,是数据库日常维护中一个非常实用的功能增强。
补丁详情:https://github.com/postgres/postgres/commit/d107176d27c73ea3589b949dde07b6bc38b8f583
|