PostgreSQL parser for Rust that uses the actual PostgreSQL server source to parse SQL queries and return the internal PostgreSQL parse tree.
Add the following to your Cargo.toml
toml
[dependencies]
pg_parse = "0.11"
```rust use pg_parse::ast::Node;
let result = pgparse::parse("SELECT * FROM contacts"); assert!(result.isok()); let result = result.unwrap(); assert!(matches!(*&result[0], Node::SelectStmt(_)));
// We can also convert back to a string, if the str
feature is enabled (enabled by default).
asserteq!(result[0].tostring(), "SELECT * FROM contacts"); ```
The pganalyze
organization maintains the official implementation: pg_query.rs
. This
closely resembles the name of the C library also published by the team (libpg_query
). This implementation uses the protobuf
interface introduced with version 13 of libpg_query
.
This library similarly consumes libpg_query
however utilizes the older JSON interface to manage parsing. The intention of this library
is to maintain a dependency "light" implementation with serde
and serde_json
being the only required runtime dependencies.
So which one should you use? You probably want to use the official pg_query.rs
library as that will continue to be
kept closely up to date with libpg_query
updates. This library will continue to be maintained however may not be as up-to-date as the official implementation.
A huge thank you to Lukas Fittl for all of his amazing work creating libpg_query.