auxten/postgresql-parser
auxten/postgresql-parser has 317 GitHub stars and 62 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-12 06:53 UTC. Last push 2026-05-30.
Pure Golang PostgreSQL (SQL:2011, SQL:2008, SQL:2003, SQL:1999, and SQL-92 Standard) Parser
What you can do
- Pure golang implementation
- Almost full support of PostgreSQL (cockroachdb style PostgreSQL)
- For SQL lineage analysis see go-sql-lineage
Measured star growth
- in 24h
- 0
- in 7 days
- Update delayed
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalWhat's this
PostgreSQL style Parser splitted from CockroachDB
See: Complex SQL format example
I tried to import github.com/cockroachdb/cockroach/pkg/sql/parser, but the dependencies is too complex to make it work.
To make things easy, I did these things:
- Copy all the
pkg/sql/parser,pkg/sql/lexand simplify the dependencies - Simplify the Makefile to just generate the goyacc stuff
- Add the goyacc generated files in parser and lex to make
go getwork easily, see the.gitignorefiles - Trim the
etcddependency, see thego.mod - Rename all test file except some
pkg/sql/parsertests - Add all necessary imports to vendor
- Remove the
panicof meeting unregistried functions, see the WrapFunction - Other nasty things make the parser just work that I forgot :p
Who is using this
Features
- Pure golang implementation
- Almost full support of PostgreSQL (
cockroachdbstyle PostgreSQL) - For SQL lineage analysis see go-sql-lineage
SQL Standard Compliance
The code is derived from CockroachDB v20.1.11 which supports most of the major features of SQL:2011. See:
How to use
package main
import (
"log"
"github.com/auxten/postgresql-parser/pkg/sql/parser"
"github.com/auxten/postgresql-parser/pkg/walk"
)
func main() {
sql := `select marr
from (select marr_stat_cd AS marr, label AS l
from root_loan_mock_v4
order by root_loan_mock_v4.age desc, l desc
limit 5) as v4
LIMIT 1;`
w := &walk.AstWalker{
Fn: func(ctx interface{}, node interface{}) (stop bool) {
log.Printf("node type %T", node)
return false
},
}
stmts, err := parser.Parse(sql)
if err != nil {
return
}
_, _ = w.Walk(stmts, nil)
return
}
SQL parser
This project contains code that is automatically generated using goyacc.
goyacc reads the SQL expressions (sql.y) and generates a parser which could be used to tokenize a given input.
You could update the generated code using the generate target inside the project's Makefile.
$ make generate
Progress
- 2021-02-16
github.com/auxten/postgresql-parser/pkg/sql/parserUnit tests works now! - 2021-03-08 Add walker package.
- 2022-08-03 Remove vendored dependencies by @mostafa in https://github.com/auxten/postgresql-parser/pull/19
Todo
- Fix more unit tests
- Make built-in function parsing work
Explore related projects
Asabeneh/30-Days-Of-Python
The 30 Days of Python programming challenge is a step-by-step guide to learn the Python programming language in 30 days. This challenge may take more than 100 days. Follow your own pace. These videos may help too: https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
78,618 starsgrafana/grafana
The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
77,859 starsredis/redis
For developers, who are building real-time data-driven applications, Redis is the preferred, fastest, and most feature-rich cache, data structure server, and document and vector query engine.
77,472 starsapache/superset
Apache Superset is a Data Visualization and Data Exploration Platform
75,495 stars