Struct mobc_postgres::PgConnectionManager
source · pub struct PgConnectionManager<Tls> { /* private fields */ }
Expand description
An mobc::Manager
for tokio_postgres::Client
s.
Example
use mobc::Pool;
use std::str::FromStr;
use std::time::Instant;
use mobc_postgres::PgConnectionManager;
use tokio_postgres::Config;
use tokio_postgres::NoTls;
#[tokio::main]
async fn main() {
let config = Config::from_str("postgres://jiaju:jiaju@localhost:5432").unwrap();
let manager = PgConnectionManager::new(config, NoTls);
let pool = Pool::builder().max_open(20).build(manager);
const MAX: usize = 5000;
let now = Instant::now();
let (tx, mut rx) = tokio::sync::mpsc::channel::<usize>(16);
for i in 0..MAX {
let pool = pool.clone();
let mut tx_c = tx.clone();
tokio::spawn(async move {
let client = pool.get().await.unwrap();
let rows = client.query("SELECT 1 + 2", &[]).await.unwrap();
let value: i32 = rows[0].get(0);
assert_eq!(value, 3);
tx_c.send(i).await.unwrap();
});
}
for _ in 0..MAX {
rx.recv().await.unwrap();
}
println!("cost: {:?}", now.elapsed());
}
Implementations§
Trait Implementations§
source§impl<Tls> Manager for PgConnectionManager<Tls>where
Tls: MakeTlsConnect<Socket> + Clone + Send + Sync + 'static,
<Tls as MakeTlsConnect<Socket>>::Stream: Send + Sync,
<Tls as MakeTlsConnect<Socket>>::TlsConnect: Send,
<<Tls as MakeTlsConnect<Socket>>::TlsConnect as TlsConnect<Socket>>::Future: Send,
impl<Tls> Manager for PgConnectionManager<Tls>where
Tls: MakeTlsConnect<Socket> + Clone + Send + Sync + 'static,
<Tls as MakeTlsConnect<Socket>>::Stream: Send + Sync,
<Tls as MakeTlsConnect<Socket>>::TlsConnect: Send,
<<Tls as MakeTlsConnect<Socket>>::TlsConnect as TlsConnect<Socket>>::Future: Send,
§type Connection = Client
type Connection = Client
The connection type this manager deals with.
source§fn connect<'life0, 'async_trait>(
&'life0 self
) -> Pin<Box<dyn Future<Output = Result<Self::Connection, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn connect<'life0, 'async_trait>(
&'life0 self
) -> Pin<Box<dyn Future<Output = Result<Self::Connection, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Attempts to create a new connection.
source§fn check<'life0, 'async_trait>(
&'life0 self,
conn: Self::Connection
) -> Pin<Box<dyn Future<Output = Result<Self::Connection, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn check<'life0, 'async_trait>(
&'life0 self,
conn: Self::Connection
) -> Pin<Box<dyn Future<Output = Result<Self::Connection, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Determines if the connection is still connected to the database when check-out. Read more
source§fn spawn_task<T>(&self, task: T)where
T: Future + Send + 'static,
<T as Future>::Output: Send + 'static,
fn spawn_task<T>(&self, task: T)where
T: Future + Send + 'static,
<T as Future>::Output: Send + 'static,
Spawns a new asynchronous task.
source§fn validate(&self, _conn: &mut Self::Connection) -> bool
fn validate(&self, _conn: &mut Self::Connection) -> bool
Quickly determines a connection is still valid when check-in.