Skip to main content

Compare / pg_query_go

pg_query_go alternative: GoSQLX compared

pg_query_go wraps the real PostgreSQL parser (libpg_query) through CGo, so it is the exact PostgreSQL grammar.

Approach
Bindings to PostgreSQL’s own parser, converted to Go structs
Dialect
PostgreSQL only
CGo required
Yes (needs a C toolchain, complicates cross-compilation)

Pick pg_query_go when

  • You need exact PostgreSQL grammar fidelity, including every syntax edge case, because it is the same parser the server uses.
  • You only target PostgreSQL and already build with CGo.
  • You need parse-tree compatibility with other pg_query bindings.

Pick GoSQLX when

  • You want a pure Go dependency: no CGo, easy cross-compilation, WASM builds.
  • You work with more than one dialect (PostgreSQL, MySQL, MariaDB, SQL Server, Oracle, SQLite, Snowflake, ClickHouse).
  • You also want formatting, linting, security scanning, an LSP or an MCP server from the same library.

Parse speed, measured

End-to-end stage (SQL text to AST) · Apple M4 (darwin/arm64) · go1.27.2 · median of 10 runs · measured 2026-10-15 · pg_query_go v6.2.5. Lower is faster.

QueryGoSQLXpg_query_go
Simple SELECT925 ns7,107 ns
SELECT with WHERE, ORDER BY, LIMIT2,028 ns22,686 ns
Two-table JOIN3,215 ns30,035 ns
GROUP BY with HAVING2,230 ns17,666 ns
IN subquery1,887 ns15,955 ns
Common table expression2,748 ns23,177 ns
Window function1,899 ns14,279 ns
Multi-JOIN analytical query8,776 ns81,637 ns
INSERT VALUES1,443 ns8,918 ns
UPDATE with WHERE1,200 ns9,423 ns
DELETE with WHERE841 ns5,678 ns

Read with care. The libraries implement different SQL dialects and build different ASTs (pg_query_go wraps the real PostgreSQL parser through CGo and converts its tree to Go structs; Vitess, TiDB and xwb1989 implement MySQL grammars). Each figure is the end-to-end cost of turning the same SQL text into that library's AST on the stated hardware, not identical work. Results vary by query, so check the rows that resemble your workload.

Full table, methodology and reproduce steps: competitor benchmarks. Source: benchmarks/compare/results/latest.json, commit c95aa7c.

What GoSQLX offers

Pure Go with no CGo, 8 dialects, 30 built-in lint rules, a formatter, a SQL injection scanner, an LSP server and an MCP server. Requires Go 1.26+.

Moving over? Migrating from pg_query.

Full feature matrix