Struct diesel::prelude::PgConnection

source ·
pub struct PgConnection { /* private fields */ }
Expand description

The connection string expected by PgConnection::establish should be a PostgreSQL connection string, as documented at https://www.postgresql.org/docs/9.4/static/libpq-connect.html#LIBPQ-CONNSTRING

§Supported loading model implementations

If you are unsure which loading mode is the correct one for your application, you likely want to use the DefaultLoadingMode as that one offers generally better performance.

Due to the fact that PgConnection supports multiple loading modes it is required to always specify the used loading mode when calling RunQueryDsl::load_iter

§DefaultLoadingMode

By using this mode PgConnection defaults to loading all response values at once and only performs deserialization afterward for the DefaultLoadingMode. Generally this mode will be more performant as it.

This loading mode allows users to perform hold more than one iterator at once using the same connection:

use diesel::connection::DefaultLoadingMode;

let iter1 = users::table.load_iter::<(i32, String), DefaultLoadingMode>(connection)?;
let iter2 = users::table.load_iter::<(i32, String), DefaultLoadingMode>(connection)?;

for r in iter1 {
    let (id, name) = r?;
    println!("Id: {} Name: {}", id, name);
}

for r in iter2 {
    let (id, name) = r?;
    println!("Id: {} Name: {}", id, name);
}

§PgRowByRowLoadingMode

By using this mode PgConnection defaults to loading each row of the result set sepreatly. This might be desired for huge result sets.

This loading mode prevents creating more than one iterator at once using the same connection. The following code is not allowed:

use diesel::pg::PgRowByRowLoadingMode;

let iter1 = users::table.load_iter::<(i32, String), PgRowByRowLoadingMode>(connection)?;
// creating a second iterator generates an compiler error
let iter2 = users::table.load_iter::<(i32, String), PgRowByRowLoadingMode>(connection)?;

for r in iter1 {
    let (id, name) = r?;
    println!("Id: {} Name: {}", id, name);
}

for r in iter2 {
    let (id, name) = r?;
    println!("Id: {} Name: {}", id, name);
}

Implementations§

source§

impl PgConnection

source

pub fn build_transaction(&mut self) -> TransactionBuilder<'_, Self>

Build a transaction, specifying additional details such as isolation level

See TransactionBuilder for more examples.

conn.build_transaction()
    .read_only()
    .serializable()
    .deferrable()
    .run(|conn| Ok(()))

Trait Implementations§

source§

impl Connection for PgConnection

§

type Backend = Pg

The backend this type connects to
§

type TransactionManager = AnsiTransactionManager

The transaction manager implementation used by this connection
source§

fn establish(database_url: &str) -> ConnectionResult<PgConnection>

Establishes a new connection to the database Read more
source§

fn execute_returning_count<T>(&mut self, source: &T) -> QueryResult<usize>
where T: QueryFragment<Pg> + QueryId,

Execute a single SQL statements given by a query and return number of affected rows
source§

fn transaction_state(&mut self) -> &mut AnsiTransactionManager
where Self: Sized,

Get access to the current transaction state of this connection Read more
source§

fn transaction<T, E, F>(&mut self, f: F) -> Result<T, E>
where F: FnOnce(&mut Self) -> Result<T, E>, E: From<Error>,

Executes the given function inside of a database transaction Read more
source§

fn begin_test_transaction(&mut self) -> QueryResult<()>

Creates a transaction that will never be committed. This is useful for tests. Panics if called while inside of a transaction or if called with a connection containing a broken transaction
source§

fn test_transaction<T, E, F>(&mut self, f: F) -> T
where F: FnOnce(&mut Self) -> Result<T, E>, E: Debug,

Executes the given function inside a transaction, but does not commit it. Panics if the given function returns an error. Read more
source§

impl<'conn, 'query> ConnectionGatWorkaround<'conn, 'query, Pg> for PgConnection

§

type Cursor = Cursor

The cursor type returned by LoadConnection::load Read more
§

type Row = PgRow

The row type used as Iterator::Item for the iterator implementation of ConnectionGatWorkaround::Cursor
source§

impl<'conn, 'query> ConnectionGatWorkaround<'conn, 'query, Pg, PgRowByRowLoadingMode> for PgConnection

§

type Cursor = RowByRowCursor<'conn>

The cursor type returned by LoadConnection::load Read more
§

type Row = PgRow

The row type used as Iterator::Item for the iterator implementation of ConnectionGatWorkaround::Cursor
source§

impl GetPgMetadataCache for PgConnection

source§

fn get_metadata_cache(&mut self) -> &mut PgMetadataCache

Get the PgMetadataCache
source§

impl<B> LoadConnection<B> for PgConnection
where Self: PgLoadingMode<B>,

source§

fn load<'conn, 'query, T>( &'conn mut self, source: T, ) -> QueryResult<LoadRowIter<'conn, 'query, Self, Self::Backend, B>>
where T: Query + QueryFragment<Self::Backend> + QueryId + 'query, Self::Backend: QueryMetadata<T::SqlType>,

Executes a given query and returns any requested values Read more
source§

impl MigrationConnection for PgConnection

source§

fn setup(&mut self) -> QueryResult<usize>

Setup the following table: Read more
source§

impl SimpleConnection for PgConnection

source§

fn batch_execute(&mut self, query: &str) -> QueryResult<()>

Execute multiple SQL statements within the same string. Read more
source§

impl<'b, Changes, Output> UpdateAndFetchResults<Changes, Output> for PgConnection
where Changes: Copy + AsChangeset<Target = <Changes as HasTable>::Table> + IntoUpdateTarget, Update<Changes, Changes>: LoadQuery<'b, PgConnection, Output>, <Changes::Table as Table>::AllColumns: ValidGrouping<()>, <<Changes::Table as Table>::AllColumns as ValidGrouping<()>>::IsAggregate: MixedAggregates<No, Output = No>,

source§

fn update_and_fetch(&mut self, changeset: Changes) -> QueryResult<Output>

See the traits documentation.
source§

impl Send for PgConnection

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<C> BoxableConnection<<C as Connection>::Backend> for C
where C: Connection + Any,

source§

fn as_any(&self) -> &(dyn Any + 'static)

Maps the current connection to std::any::Any
source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoSql for T

source§

fn into_sql<T>(self) -> AsExprOf<Self, T>

Convert self to an expression for Diesel’s query builder. Read more
source§

fn as_sql<'a, T>(&'a self) -> AsExprOf<&'a Self, T>

Convert &self to an expression for Diesel’s query builder. Read more
source§

impl<T> PgMetadataLookup for T

source§

fn lookup_type( &mut self, type_name: &str, schema: Option<&str>, ) -> PgTypeMetadata

Determine the type metadata for the given type_name Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.