PostgreSQL 格式化器
按照 Postgres 规则格式化 PostgreSQL 查询和脚本,支持函数体中的美元引号字符串、E'' 转义字符串、双引号标识符、:: 类型转换,以及 ->> 和 @> 等 JSON 运算符。RETURNING、ON CONFLICT 和 DO UPDATE SET 等子句会各占一行;未闭合的字符串、注释或括号会报告行号和列号。适合开发者阅读迁移脚本和查询。
常见问题
能识别哪些 PostgreSQL 语法?
可识别带双写引号的标准字符串、带反斜杠转义的 E'' 字符串、U&'' Unicode 字符串、B'' 和 X'' 位字符串、双引号标识符以及 $1 参数。也能读取 $$...$$ 或 $body$...$body$ 这类美元引号字符串。
美元引号中的函数体会如何处理?
美元引号中的函数体会按原样保留,因为对于 PostgreSQL 来说,它是一个字符串。外围的 CREATE FUNCTION 语句会进行格式化,但函数体本身不会更改。
类型转换和运算符会保持完整吗?
是的。像 value::integer 这样的类型转换会保持连在一起,->、->>、#>、#>>、@>、<@、?|、?&、@@ 以及正则表达式运算符 ~、~* 和它们的否定形式都不会被拆开。在 PostgreSQL 中,# 是运算符,不是注释。
哪些 PostgreSQL 子句会单独换行?
RETURNING、ON CONFLICT、DO UPDATE SET、FOR UPDATE、FOR NO KEY UPDATE、FOR SHARE 和 FOR KEY SHARE 会作为完整子句保留在一起。常见的 SELECT、FROM、WHERE、GROUP BY、ORDER BY、LIMIT 和 OFFSET 子句也会各自另起一行。
注释会保留吗?
会。行注释和块注释会保留在原处,并且可以正确读取 PostgreSQL 支持的嵌套块注释。多行块注释会根据新位置重新缩进。
支持 MERGE 吗?
支持。WHEN MATCHED 和 WHEN NOT MATCHED 分支会另起一行,因此 PostgreSQL 15 及更高版本中的 MERGE 语句仍然清晰易读。
它会更改关键字的大小写吗?
不会。关键字和标识符会保留你输入时的大小写。PostgreSQL 中的带引号标识符区分大小写,且绝不会被修改。
会检测哪些错误?
未闭合的字符串、带引号的标识符、美元引号字符串和块注释,以及括号不匹配,都会报告行号和列号。此工具不会检查完整的 PostgreSQL 语法或你的架构。
输入内容可以有多大?
每次请求最多 1 MB,每条语句最多 128 KB。包含许多语句的迁移文件会逐条格式化,并以空行分隔。
可以选择缩进方式吗?
可以。使用 2 个或 4 个空格,也可以使用制表符。你的 SQL 只会在内存中处理,绝不会保存。