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.
| Query | GoSQLX | pg_query_go |
|---|---|---|
| Simple SELECT | 925 ns | 7,107 ns |
| SELECT with WHERE, ORDER BY, LIMIT | 2,028 ns | 22,686 ns |
| Two-table JOIN | 3,215 ns | 30,035 ns |
| GROUP BY with HAVING | 2,230 ns | 17,666 ns |
| IN subquery | 1,887 ns | 15,955 ns |
| Common table expression | 2,748 ns | 23,177 ns |
| Window function | 1,899 ns | 14,279 ns |
| Multi-JOIN analytical query | 8,776 ns | 81,637 ns |
| INSERT VALUES | 1,443 ns | 8,918 ns |
| UPDATE with WHERE | 1,200 ns | 9,423 ns |
| DELETE with WHERE | 841 ns | 5,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.