PostgreSQL码农集散地

PG 19 支持干湿分离

本期播客

PG 19 vacuumdb 干湿分离补丁

PG 19 vacuumdb 支持干湿分离了!

vacuumdb 是 PostgreSQL 的一个工具,用于对数据库进行清理(VACUUM)和分析(ANALYZE)。

这个补丁新添加的 --dry-run(空运行/模拟运行)选项的作用是:

  1. 打印命令,但不执行: 它会指示 vacuumdb 打印出所有它原本要发送给 PostgreSQL 服务器执行的 VACUUM 和 ANALYZE 命令。
  2. 不实际操作: 启用此选项后,这些命令将不会被发送到服务器执行,因此不会对数据库进行任何实际的清理或分析操作。

核心变更点

这个补丁主要修改了以下文件:

  1. 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 为 true,则只打印 SQL 命令(如果 echo 也启用),但不会调用 PQsendQuery 将命令发送到数据库连接。
  • doc/src/sgml/ref/vacuumdb.sgml:
    • 更新了 vacuumdb 的手册页(man page),加入了对 --dry-run 选项的说明。
  • src/bin/scripts/t/100_vacuumdb.pl:
    • 添加了新的测试用例,确保 --dry-run 选项能正确地打印预期的命令,但不会实际执行它们。

    总结

    这个功能对于用户来说非常实用,因为它允许用户在执行实际的数据库维护操作(如大规模的 VACUUM/ANALYZE)之前,先预览哪些命令会被执行,从而可以检查和验证操作的范围和参数是否正确,避免潜在的错误或不必要的资源消耗。

    补丁详情: https://github.com/postgres/postgres/commit/d107176d27c73ea3589b949dde07b6bc38b8f583

    vacuumdb: Add --dry-run.  
    author Nathan Bossart <[email protected]>   
    Tue, 9 Dec 2025 19:34:22 +0000 (13:34 -0600)  
    committer Nathan Bossart <[email protected]>   
    Tue, 9 Dec 2025 19:34:22 +0000 (13:34 -0600)  
    commit d107176d27c73ea3589b949dde07b6bc38b8f583  
    tree e3e93a198916dc99bb53a03dde45741c08d5f87a tree  
    parent 750816971b35270971dd77f37ed1e9655fce4ed9 commit | diff  
    vacuumdb: Add --dry-run.  

    This new option instructs vacuumdb to print, but not execute, the  
    VACUUM and ANALYZE commands that would've been sent to the server.  

    Author: Corey Huinker <[email protected]>  
    Reviewed-by: Chao Li <[email protected]>  
    Reviewed-by: Kirill Reshke <[email protected]>  
    Reviewed-by: Álvaro Herrera <[email protected]>  
    Discussion: https://postgr.es/m/CADkLM%3DckHkX7Of5SrK7g0LokPUwJ%3Dkk8JU1GXGF5pZ1eBVr0%3DQ%40mail.gmail.com