| Crates.io | pg_parse |
| lib.rs | pg_parse |
| version | 0.12.0 |
| created_at | 2022-01-20 03:02:04.791825+00 |
| updated_at | 2025-05-23 19:41:32.464768+00 |
| description | PostgreSQL parser that uses the actual PostgreSQL server source to parse SQL queries and return the internal PostgreSQL parse tree. |
| homepage | |
| repository | https://github.com/paupino/pg_parse |
| max_upload_size | |
| id | 517268 |
| size | 31,412,897 |
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
[dependencies]
pg_parse = "0.12"
use pg_parse::ast::Node;
let result = pg_parse::parse("SELECT * FROM contacts");
assert!(result.is_ok());
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).
#[cfg(feature = "str")]
assert_eq!(result[0].to_string(), "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.