рдореИрдВ рдореНрдпреВрдЯреЗрдХреНрд╕ рдореЗрдВ PooledConnection
рд▓рдкреЗрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
`std::ptr::NonNull<pq_sys::pg_conn>` cannot be shared between threads safely
within `r2d2::PooledConnection<embedded_migrations::diesel::r2d2::ConnectionManager<embedded_migrations::diesel::PgConnection>>`, the trait `std::marker::Sync` is not implemented for `std::ptr::NonNull<pq_sys::pg_conn>`
required because it appears within the type `embedded_migrations::diesel::pg::connection::raw::RawConnection`
required because it appears within the type `embedded_migrations::diesel::PgConnection`
required because it appears within the type `r2d2::Conn<embedded_migrations::diesel::PgConnection>`
required because it appears within the type `std::option::Option<r2d2::Conn<embedded_migrations::diesel::PgConnection>>`
required because it appears within the type `r2d2::PooledConnection<embedded_migrations::diesel::r2d2::ConnectionManager<embedded_migrations::diesel::PgConnection>>`
required because of the requirements on the impl of `std::marker::Send` for `&r2d2::PooledConnection<embedded_migrations::diesel::r2d2::ConnectionManager<embedded_migrations::diesel::PgConnection>>`
required because of the requirements on the impl of `std::marker::Send` for `std::sync::Mutex<&r2d2::PooledConnection<embedded_migrations::diesel::r2d2::ConnectionManager<embedded_migrations::diesel::PgConnection>>>`
рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдореИрдВ рдХрд┐рд╕реА рдХрдиреЗрдХреНрд╢рди рдХрд╛ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛?
рд╡рд╣ "рдбрд┐рдЬрд╛рдЗрди" рджреНрд╡рд╛рд░рд╛ рд╣реИред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдиреЗрдХреНрд╢рди рдХреЗрд╡рд▓ рдереНрд░реЗрдбрд╕реЗрдл рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП: рд╕рдВрднрд╡рддрдГ рдЖрдк рдЬреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ Pool
рдХреЗ рдмрдЬрд╛рдп PooledConnection
рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдереНрд░реЗрдб рдХреЗ рднреАрддрд░ рд╕реЗ get()
рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг 1
async fn execute(pool: &Pool<ConnectionManager<PgConnection>>, data: SomeData) -> Result<(), Error> {
diesel::insert_into(some_table)
.values(data)
.execute(&pool.get()?)?;
Ok(())
}
рдЙрджрд╛рд╣рд░рдг 2
pub struct Database {
pool: Pool<ConnectionManager<PgConnection>>,
}
impl Database {
async fn insert_some_data(&self, data: SomeData) -> Result<(), Error> {
diesel::insert_into(some_table)
.values(data)
.execute(&self.conn.get()?)?;
Ok(())
}
}
рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП r2d2
рдбреЙрдХреНрд╕ рджреЗрдЦреЗрдВ: https://docs.diesel.rs/r2d2/
рдЗрд╕рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП: рдЖрдк _probably_ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, $#$
PooledConnection
$#$ рдХреЗ рдмрдЬрд╛рдпPool
рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдереНрд░реЗрдб рдХреЗ рднреАрддрд░ рд╕реЗget()
рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИредрдЙрджрд╛рд╣рд░рдг 1
async fn execute(pool: &Pool<ConnectionManager<PgConnection>>, data: SomeData) -> Result<(), Error> { diesel::insert_into(some_table) .values(data) .execute(&pool.get()?)?; Ok(()) }
рдЙрджрд╛рд╣рд░рдг 2
pub struct Database { pool: Pool<ConnectionManager<PgConnection>>, } impl Database { async fn insert_some_data(&self, data: SomeData) -> Result<(), Error> { diesel::insert_into(some_table) .values(data) .execute(&self.conn.get()?)?; Ok(()) } }
рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП
r2d2
рдбреЙрдХреНрд╕ рджреЗрдЦреЗрдВ: https://docs.diesel.rs/r2d2/
&pool.get рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж ()
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЗрд╕рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП: рд╕рдВрднрд╡рддрдГ рдЖрдк рдЬреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣
Pool
рдХреЗ рдмрдЬрд╛рдпPooledConnection
рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдереНрд░реЗрдб рдХреЗ рднреАрддрд░ рд╕реЗget()
рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИредрдЙрджрд╛рд╣рд░рдг 1
рдЙрджрд╛рд╣рд░рдг 2
рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП
r2d2
рдбреЙрдХреНрд╕ рджреЗрдЦреЗрдВ: https://docs.diesel.rs/r2d2/