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,
Source§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)
fn spawn_task<T>(&self, task: T)
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.
Auto Trait Implementations§
impl<Tls> Freeze for PgConnectionManager<Tls>where
Tls: Freeze,
impl<Tls> RefUnwindSafe for PgConnectionManager<Tls>where
Tls: RefUnwindSafe,
impl<Tls> Send for PgConnectionManager<Tls>where
Tls: Send,
impl<Tls> Sync for PgConnectionManager<Tls>where
Tls: Sync,
impl<Tls> Unpin for PgConnectionManager<Tls>where
Tls: Unpin,
impl<Tls> UnwindSafe for PgConnectionManager<Tls>where
Tls: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more