2个版本
0.5.1 | 2020年7月20日 |
---|---|
0.5.0 | 2020年4月7日 |
#1826 in 数据库接口
每月 33 次下载
13KB
158 行
这个crate是tokio-postgres的包装器。
优点
不依赖于运行时环境,可以在任何异步运行时上使用。
使用方法
几乎与tokio-postgres相同。
- TCP或UDS
use async_postgres::connect;
use std::error::Error;
use async_std::task::spawn;
async fn play() -> Result<(), Box<dyn Error>> {
let url = "host=localhost user=postgres";
let (client, conn) = connect(url.parse()?).await?;
spawn(conn);
let row = client.query_one("SELECT * FROM user WHERE id=$1", &[&0]).await?;
let value: &str = row.get(0);
println!("value: {}", value);
Ok(())
}
- TLS
use async_postgres::connect_tls;
use native_tls::{Certificate, TlsConnector};
use postgres_native_tls::MakeTlsConnector;
use std::fs;
use std::error::Error;
use async_std::task::spawn;
async fn play() -> Result<(), Box<dyn Error>> {
let cert = fs::read("database_cert.pem")?;
let cert = Certificate::from_pem(&cert)?;
let connector = TlsConnector::builder()
.add_root_certificate(cert)
.build()?;
let connector = MakeTlsConnector::new(connector);
let url = "host=localhost user=postgres sslmode=require";
let (client, conn) = connect_tls(url.parse()?, connector).await?;
spawn(conn);
let row = client.query_one("SELECT * FROM user WHERE id=$1", &[&0]).await?;
let value: &str = row.get(0);
println!("value: {}", value);
Ok(())
}
性能
几乎与tokio-postgres相同,您可以在这里查看实时基准测试(此处)。
开发
运行测试需要一个PostgreSQL服务器和环境变量
TCP_URL="postgresql:///<db>?host=<tcp host>&port=<port>&user=<user>&password=<passwd>"
UDS_URL="postgresql:///<db>?host=<postgres uds dir>&port=<port>&user=<user>&password=<passwd>"
依赖项
~14–27MB
~467K SLoC