| CARVIEW |
Select Language
HTTP/1.1 200 OK
Connection: keep-alive
Server: nginx/1.24.0 (Ubuntu)
Content-Type: text/html; charset=utf-8
Cache-Control: public, max-age=300
Content-Encoding: gzip
Via: 1.1 varnish, 1.1 varnish
Accept-Ranges: bytes
Age: 0
Date: Sun, 18 Jan 2026 01:04:09 GMT
X-Served-By: cache-dfw-kdal2120131-DFW, cache-bom-vanm7210091-BOM
X-Cache: MISS, MISS
X-Cache-Hits: 0, 0
X-Timer: S1768698249.948518,VS0,VE779
Vary: Accept, Accept-Encoding
transfer-encoding: chunked
pg-query: Parse PostgreSQL DDL and DML: Haskell bindings for libpg_query
[Skip to Readme]
pg-query: Parse PostgreSQL DDL and DML: Haskell bindings for libpg_query
pg-query offers Haskell bindings for libpg_query, which makes use of the actual PostgreSQL server source to parse SQL queries and return the internal PostgreSQL parse tree.
[Skip to Readme]
Modules
[Index] [Quick Jump]
Downloads
- pg-query-0.0.1.1.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
- No Candidates
| Versions [RSS] | 0.0.1.0, 0.0.1.1 |
|---|---|
| Change log | CHANGELOG.md |
| Dependencies | base (>=4.19.1.0 && <5.0), bytestring (>=0.12.1.0 && <1.0), lens (>=5.2.3 && <6.0), proto-lens (>=0.7.1.5 && <1.0), proto-lens-runtime (>=0.7.0.6 && <1.0), temporary (>=1.3 && <2.0), text (>=2.1.1 && <3.0), typed-process (>=0.2.11.1 && <1.0) [details] |
| License | BSD-3-Clause |
| Author | rhizomic |
| Maintainer | rhzmc@proton.me |
| Uploaded | by rhizomic at 2024-11-18T12:16:55Z |
| Category | Database, Data |
| Home page | https://git.sr.ht/~rhizomic/pg-query |
| Distributions | |
| Downloads | 79 total (10 in the last 30 days) |
| Rating | (no votes yet) [estimated by Bayesian average] |
| Your Rating |
|
| Status | Docs uploaded by user Build status unknown [no reports yet] |
Readme for pg-query-0.0.1.1
[back to package description]pg-query
pg-query offers Haskell bindings for libpg_query,
which makes use of the actual PostgreSQL server source to parse SQL queries and
return the internal PostgreSQL parse tree.
Example
{-# LANGUAGE NoImplicitPrelude #-}
import Data.Either (Either (Left, Right))
import GHC.Base (error)
import GHC.IO (IO)
import PgQuery (parseSql)
import System.IO (print)
main :: IO ()
main = do
eResult <- parseSql "select u.name, u.address from users u where u.id = $1"
case eResult of
Left err -> error err
Right result -> print result
You should see output that looks like this (formatted for clarity):
{ version: 160001
stmts {
stmt {
select_stmt {
target_list {
res_target {
val {
column_ref {
fields {
string { sval: "u" }
}
fields {
string { sval: "name" }
}
location: 7
}
}
location: 7
}
}
target_list {
res_target {
val {
column_ref {
fields {
string { sval: "u" }
}
fields {
string { sval: "address" }
}
location: 15
}
}
location: 15
}
}
from_clause {
range_var {
relname: "users"
inh: true
relpersistence: "p"
alias { aliasname: "u" }
location: 30
}
}
where_clause {
a_expr {
kind: AEXPR_OP
name {
string { sval: "=" }
}
lexpr {
column_ref {
fields {
string { sval: "u" }
}
fields {
string { sval: "id" }
}
location: 44
}
}
rexpr {
param_ref {
number: 1
location: 51
}
}
location: 49
}
}
limit_option: LIMIT_OPTION_DEFAULT
op: SETOP_NONE
}
}
}
}
Interacting with the parse tree is made possible through the use of
proto-lens. Some examples can be seen
in test/PgQuery/.
Installation
You'll need to ensure libpg_query is installed before trying to build this package.
Development
Building
make build
Testing
make test