249f1694efd59357f77e092935f5859c37c91d0f
- VSCode: switch from npm ci to pnpm (project uses pnpm-lock.yaml) - RPM: replace docker create+cp with docker run --rm -v mount to avoid missing /build directory in rockylinux:9 - AUR: guard PKGBUILD reads with -f check so first publish to an empty AUR repo defaults pkgrel to 1 instead of crashing Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
PgTidy
A PostgreSQL linter and formatter. Enforces consistent SQL style, detects PG-specific issues, and formats migrations, schemas, functions, procedures, and triggers.
Ships as a CLI, LSP server, VSCode extension, and DataGrip plugin.
Install
go install git.warky.dev/wdevs/pgtidy/cmd/pgtidy@latest
Or download a pre-built binary from Releases.
CLI
pgtidy fmt [flags] [files...] Format SQL/PL-pgSQL (stdin if no files)
pgtidy lint [flags] [files...] Lint SQL
pgtidy config Print effective configuration
pgtidy lsp Start LSP server (stdio)
pgtidy version
fmt flags
| Flag | Effect |
|---|---|
-w, --write |
Rewrite files in place |
-l, --list |
List unformatted files |
-d, --diff |
Print unified diff |
--check |
Exit non-zero if not formatted (CI) |
Examples
pgtidy fmt -w schema.sql # format in place
pgtidy fmt --check migrations/ # CI check
cat query.sql | pgtidy fmt # stdin → stdout
pgtidy lint schema.sql # lint a file
Config — .pgtidy.yaml
Discovered by walking up from the target file. Defaults = house style.
style:
indent: 2
keyword_case: upper # upper | lower | preserve
identifier_case: lower
type_case: lower
leading_comma: true
pgtidy config # print resolved config
House Style (defaults)
- Keywords
UPPERCASE; data types and identifierslowercase - 2-space indent
- Leading-comma lists (SELECT columns, function params)
- Function params one-per-line;
LANGUAGE,SECURITY, volatility each on own line - PL/pgSQL:
DECLAREblock vars 2-space indented;BEGIN/ENDat body level - Spaces around binary operators (
=,<>,||,:=); no space before(or around::,->,->>
Build from Source
git clone https://git.warky.dev/wdevs/pgtidy
cd pgtidy
make build # → dist/pgtidy
make test # all tests + corpus harness
make snapshot # multi-platform binaries (requires goreleaser)
Editor Integration
VSCode — install the extension from the marketplace or build locally:
make vscode-package
DataGrip / JetBrains — install via the plugin marketplace (LSP4IJ-based).
Other LSP editors — run pgtidy lsp as a stdio LSP server.
