Hein a0838e4bdc
Release / Test (push) Successful in 34s
CI / Test (push) Successful in 38s
Release / Windows installer (push) Successful in 58s
CI / Build (push) Successful in 27s
Release / Release (push) Successful in 37s
Release / VSCode Extension (push) Successful in 43s
Release / Debian packages (push) Successful in 59s
Release / RPM package (push) Successful in 1m3s
Release / AUR package (push) Successful in 1m32s
Release / DataGrip Plugin (push) Successful in 3m17s
chore(release): bump version to 0.0.4
2026-07-02 14:42:16 +02:00
2026-06-23 16:59:50 +02:00
2026-06-23 16:59:50 +02:00
2026-06-23 16:59:50 +02:00
2026-06-23 11:50:55 +00:00
2026-06-23 16:59:50 +02:00

PgTidy

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 identifiers lowercase
  • 2-space indent
  • Leading-comma lists (SELECT columns, function params)
  • Function params one-per-line; LANGUAGE, SECURITY, volatility each on own line
  • PL/pgSQL: DECLARE block vars 2-space indented; BEGIN/END at 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.

S
Description
A PostgreSQL-focused linter and formatter for enforcing consistent SQL style, detecting PostgreSQL-specific issues, and formatting migrations, schemas, functions, procedures, triggers, and related database code.
Readme MIT
831 KiB
v0.0.7
Latest
2026-07-17 12:29:45 +00:00
Languages
Go 87.4%
Kotlin 5.9%
NSIS 3.1%
TypeScript 1.5%
Shell 1.1%
Other 1%