2 releases
Uses new Rust 2024
new 0.1.1 | May 5, 2025 |
---|---|
0.1.0 | May 5, 2025 |
#1936 in Database interfaces
165KB
3.5K
SLoC
Postro Postgres Driver
Asynchronous Postgres Driver and Utility.
Originally, this is an attempt to take out the Postgres part of sqlx crate, but the underlying structure is very different, although the public interface api is pretty simmilar.
Installation
To install postro
, run:
cargo add postro
or add this line to your Cargo.toml
in [dependencies]
section:
postro = "0.1.1"
Usage
The general usage is to use database pooling via the Pool
API:
use postro::{FromRow, Pool, Result, execute, query};
// automatically extract query result
#[derive(Debug, FromRow)]
struct Post {
id: i32,
name: String,
}
#[tokio::main]
async fn main() -> Result<()> {
// will read the `DATABASE_URL` environment variable
let mut pool = Pool::connect_env().await?;
let mut handles = vec![];
// execute a statement
execute("CREATE TABLE post(id serial, name text)", &mut pool).await?;
for i in 0..24 {
// cloning pool is cheap and share the same connection pool
let mut pool = pool.clone();
handles.push(tokio::spawn(async move {
execute("INSERT INTO post(name) VALUES($1)", &mut pool)
.bind(&format!("thread{i}"))
.await
}));
}
for h in handles {
h.await.unwrap()?;
}
// extract query result
let posts = query::<_, _, Post>("SELECT * FROM post", &mut pool)
.fetch_all()
.await?;
assert!(posts.iter().any(|e| e.name.as_str() == "thread23"));
assert_eq!(posts.len(), 24);
Ok(())
}
see the documentation for more details
License
This project is licensed under the MIT License - see the LICENSE file for details.
Dependencies
~4–12MB
~119K SLoC