pgfmt 2.1:原地格式化与兼容 pg_dump 的输出

发布于 2026-06-18,Gavin M. Roy
相关开源软件

原文:https://www.postgresql.org/about/news/pgfmt-21-in-place-formatting-and-pg_dump-compatible-output-3321/ 发布日期:2026-06-18 作者:Gavin M. Roy

pgfmt 2.1 带来了两个最醒目的新能力,同时借助 libpgfmt 持续扩展了格式化覆盖面。现在它也可以直接通过 Homebrew tap 安装。

通过 Homebrew 安装

brew tap gmr/pgfmt && brew install pgfmt

除了 Homebrew 方式之外,安装脚本、cargo install pgfmt 以及预编译发布二进制 仍然可用。

原地格式化

--inplace / -i 可以把格式化后的结果直接写回源文件,而不是输出到标准输出,同时保留原始文件权限。它支持一次处理多个文件:

pgfmt -i query1.sql query2.sql

pg_dump 风格输出

pgfmt --style pg_dump(别名 pgdumppostgres)会复现 PostgreSQL ruleutils.c 反解析器的布局,也就是 pg_get_viewdefpg_get_functiondef 产生的那种输出格式。对于真正的反解析输出,它能做到字节级幂等:把目录导出的定义再次格式化,得到的仍是完全相同的字节序列。这对于比较迁移脚本与 PostgreSQL 实际存储的定义差异很有帮助。

其他改进

2.1.x 这一系列还扩展了 SQL 与 PL/pgSQL 的格式化覆盖范围,并修复了多项正确性问题,其中包括此前会被错误丢弃的类型化字符串字面量 (INTERVAL '2 days')。过去无法正确处理的 catalog dump 视图和函数,现在也可以被干净地格式化。

完整变更列表请参阅发布说明