Skip to content

Latest commit

 

History

History
82 lines (65 loc) · 2.82 KB

README.md

File metadata and controls

82 lines (65 loc) · 2.82 KB

async-postgres

A runtime-independent, asynchronous PostgreSQL client.

Stable TestcodecovRust DocsCrate versionDownloadMSRV-1.40License: MIT


This crate is a wrapper of tokio-postgres.

Pros

Runtime-independent, can be used on any async runtime.

Usage

Almost the same with tokio-postgres.

  • TCP or UDS
use async_postgres::connect;use std::error::Error;use async_std::task::spawn;asyncfnplay() -> Result<(),Box<dynError>>{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;asyncfnplay() -> Result<(),Box<dynError>>{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(())}

Performance

Almost the same with tokio-postgres, you can see a live benchmark here.

Develop

Running tests needs a postgres server and environment variables:

  • 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>"
close