#postgresql #async #sql #postgres

async-postgres

一个不依赖于运行时环境的异步PostgreSQL客户端

2个版本

0.5.1 2020年7月20日
0.5.0 2020年4月7日

#1826 in 数据库接口

每月 33 次下载

MIT 协议

13KB
158

async-postgres

一个不依赖于运行时环境的异步PostgreSQL客户端。

Stable Test codecov Rust Docs Crate version Download MSRV-1.40 License: MIT


这个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