warkanum 53f136b18d
CI / Test (push) Successful in 27s
CI / Build (push) Successful in 33s
fix(release): build RPM from pre-compiled binary with injected version
rpmbuild's %build shell cannot reliably access the Go toolchain or
module cache, risking a 'dev' version string. Build the binary on the
runner (where setup-go is active) with the correct -X main.version
ldflags, then package it via rpmbuild as a binary-install RPM.

Spec changes: Source0/1 are now the binary and LICENSE; %install copies
them directly; removed %prep/%build; -bb instead of -ba (no source RPM).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 16:17:59 +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%