Struct PgConnection
pub struct PgConnection {
pub(crate) inner: Box<PgConnectionInner>,
}Expand description
A connection to a PostgreSQL database.
See [PgConnectOptions] for connection URL reference.
Fields§
§inner: Box<PgConnectionInner>Implementations§
§impl PgConnection
impl PgConnection
pub fn server_version_num(&self) -> Option<u32>
pub fn server_version_num(&self) -> Option<u32>
the version number of the server in libpq format
§impl PgConnection
impl PgConnection
pub async fn copy_in_raw(
&mut self,
statement: &str,
) -> Result<PgCopyIn<&mut PgConnection>, Error>
pub async fn copy_in_raw( &mut self, statement: &str, ) -> Result<PgCopyIn<&mut PgConnection>, Error>
Issue a COPY FROM STDIN statement and transition the connection to streaming data
to Postgres. This is a more efficient way to import data into Postgres as compared to
INSERT but requires one of a few specific data formats (text/CSV/binary).
If statement is anything other than a COPY ... FROM STDIN ... command, an error is
returned.
Command examples and accepted formats for COPY data are shown here:
https://www.postgresql.org/docs/current/sql-copy.html
§Note
[PgCopyIn::finish] or [PgCopyIn::abort] must be called when finished or the connection will return an error the next time it is used.
pub async fn copy_out_raw<'c>(
&'c mut self,
statement: &str,
) -> Result<Pin<Box<dyn Stream<Item = Result<Bytes, Error>> + Send + 'c>>, Error>
pub async fn copy_out_raw<'c>( &'c mut self, statement: &str, ) -> Result<Pin<Box<dyn Stream<Item = Result<Bytes, Error>> + Send + 'c>>, Error>
Issue a COPY TO STDOUT statement and transition the connection to streaming data
from Postgres. This is a more efficient way to export data from Postgres but
arrives in chunks of one of a few data formats (text/CSV/binary).
If statement is anything other than a COPY ... TO STDOUT ... command,
an error is returned.
Note that once this process has begun, unless you read the stream to completion, it can only be canceled in two ways:
- by closing the connection, or:
- by using another connection to kill the server process that is sending the data as shown in this StackOverflow answer.
If you don’t read the stream to completion, the next time the connection is used it will need to read and discard all the remaining queued data, which could take some time.
Command examples and accepted formats for COPY data are shown here:
https://www.postgresql.org/docs/current/sql-copy.html
Trait Implementations§
§impl<'c> Acquire<'c> for &'c mut PgConnection
impl<'c> Acquire<'c> for &'c mut PgConnection
type Database = Postgres
type Connection = &'c mut <Postgres as Database>::Connection
fn acquire( self, ) -> Pin<Box<dyn Future<Output = Result<<&'c mut PgConnection as Acquire<'c>>::Connection, Error>> + Send + 'c>>
fn begin( self, ) -> Pin<Box<dyn Future<Output = Result<Transaction<'c, Postgres>, Error>> + Send + 'c>>
§impl AnyConnectionBackend for PgConnection
impl AnyConnectionBackend for PgConnection
§fn close(
self: Box<PgConnection>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send>>
fn close( self: Box<PgConnection>, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send>>
§fn ping(
&mut self,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
fn ping( &mut self, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
§fn begin(
&mut self,
statement: Option<Cow<'static, str>>,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
fn begin( &mut self, statement: Option<Cow<'static, str>>, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
fn commit( &mut self, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
fn rollback( &mut self, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
fn start_rollback(&mut self)
§fn get_transaction_depth(&self) -> usize
fn get_transaction_depth(&self) -> usize
§fn shrink_buffers(&mut self)
fn shrink_buffers(&mut self)
Connection::shrink_buffers().fn as_migrate(&mut self) -> Result<&mut (dyn Migrate + Send + 'static), Error>
fn fetch_many<'q>( &'q mut self, query: &'q str, persistent: bool, arguments: Option<AnyArguments<'q>>, ) -> Pin<Box<dyn Stream<Item = Result<Either<AnyQueryResult, AnyRow>, Error>> + Send + 'q>>
fn fetch_optional<'q>( &'q mut self, query: &'q str, persistent: bool, arguments: Option<AnyArguments<'q>>, ) -> Pin<Box<dyn Future<Output = Result<Option<AnyRow>, Error>> + Send + 'q>>
fn prepare_with<'c, 'q>(
&'c mut self,
sql: &'q str,
_parameters: &[AnyTypeInfo],
) -> Pin<Box<dyn Future<Output = Result<AnyStatement<'q>, Error>> + Send + 'c>>where
'q: 'c,
fn describe<'q>( &'q mut self, sql: &'q str, ) -> Pin<Box<dyn Future<Output = Result<Describe<Any>, Error>> + Send + 'q>>
§fn is_in_transaction(&self) -> bool
fn is_in_transaction(&self) -> bool
§fn cached_statements_size(&self) -> usize
fn cached_statements_size(&self) -> usize
§impl AsMut<PgConnection> for PgConnection
impl AsMut<PgConnection> for PgConnection
§fn as_mut(&mut self) -> &mut PgConnection
fn as_mut(&mut self) -> &mut PgConnection
§impl Connection for PgConnection
impl Connection for PgConnection
type Database = Postgres
type Options = PgConnectOptions
§fn close(self) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send>>
fn close(self) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send>>
§fn ping(
&mut self,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
fn ping( &mut self, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
§fn begin(
&mut self,
) -> Pin<Box<dyn Future<Output = Result<Transaction<'_, <PgConnection as Connection>::Database>, Error>> + Send + '_>>where
PgConnection: Sized,
fn begin(
&mut self,
) -> Pin<Box<dyn Future<Output = Result<Transaction<'_, <PgConnection as Connection>::Database>, Error>> + Send + '_>>where
PgConnection: Sized,
§fn begin_with(
&mut self,
statement: impl Into<Cow<'static, str>>,
) -> Pin<Box<dyn Future<Output = Result<Transaction<'_, <PgConnection as Connection>::Database>, Error>> + Send + '_>>where
PgConnection: Sized,
fn begin_with(
&mut self,
statement: impl Into<Cow<'static, str>>,
) -> Pin<Box<dyn Future<Output = Result<Transaction<'_, <PgConnection as Connection>::Database>, Error>> + Send + '_>>where
PgConnection: Sized,
§fn cached_statements_size(&self) -> usize
fn cached_statements_size(&self) -> usize
§fn clear_cached_statements(
&mut self,
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
fn clear_cached_statements( &mut self, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + '_>>
§fn shrink_buffers(&mut self)
fn shrink_buffers(&mut self)
§fn is_in_transaction(&self) -> bool
fn is_in_transaction(&self) -> bool
true if the connection is currently in a transaction. Read more§fn transaction<'a, F, R, E>(
&'a mut self,
callback: F,
) -> Pin<Box<dyn Future<Output = Result<R, E>> + Send + 'a>>
fn transaction<'a, F, R, E>( &'a mut self, callback: F, ) -> Pin<Box<dyn Future<Output = Result<R, E>> + Send + 'a>>
§impl Debug for PgConnection
impl Debug for PgConnection
§impl<'c> Executor<'c> for &'c mut PgConnection
impl<'c> Executor<'c> for &'c mut PgConnection
type Database = Postgres
§fn fetch_many<'e, 'q, E>(
self,
query: E,
) -> Pin<Box<dyn Stream<Item = Result<Either<PgQueryResult, PgRow>, Error>> + Send + 'e>>where
'c: 'e,
'q: 'e,
E: Execute<'q, <&'c mut PgConnection as Executor<'c>>::Database> + 'q,
fn fetch_many<'e, 'q, E>(
self,
query: E,
) -> Pin<Box<dyn Stream<Item = Result<Either<PgQueryResult, PgRow>, Error>> + Send + 'e>>where
'c: 'e,
'q: 'e,
E: Execute<'q, <&'c mut PgConnection as Executor<'c>>::Database> + 'q,
§fn fetch_optional<'e, 'q, E>(
self,
query: E,
) -> Pin<Box<dyn Future<Output = Result<Option<PgRow>, Error>> + Send + 'e>>where
'c: 'e,
'q: 'e,
E: Execute<'q, <&'c mut PgConnection as Executor<'c>>::Database> + 'q,
fn fetch_optional<'e, 'q, E>(
self,
query: E,
) -> Pin<Box<dyn Future<Output = Result<Option<PgRow>, Error>> + Send + 'e>>where
'c: 'e,
'q: 'e,
E: Execute<'q, <&'c mut PgConnection as Executor<'c>>::Database> + 'q,
§fn prepare_with<'e, 'q>(
self,
sql: &'q str,
parameters: &'e [PgTypeInfo],
) -> Pin<Box<dyn Future<Output = Result<PgStatement<'q>, Error>> + Send + 'e>>where
'q: 'e,
'c: 'e,
fn prepare_with<'e, 'q>(
self,
sql: &'q str,
parameters: &'e [PgTypeInfo],
) -> Pin<Box<dyn Future<Output = Result<PgStatement<'q>, Error>> + Send + 'e>>where
'q: 'e,
'c: 'e,
§fn execute<'e, 'q, E>(
self,
query: E,
) -> Pin<Box<dyn Future<Output = Result<<Self::Database as Database>::QueryResult, Error>> + Send + 'e>>where
'q: 'e,
'c: 'e,
E: 'q + Execute<'q, Self::Database>,
fn execute<'e, 'q, E>(
self,
query: E,
) -> Pin<Box<dyn Future<Output = Result<<Self::Database as Database>::QueryResult, Error>> + Send + 'e>>where
'q: 'e,
'c: 'e,
E: 'q + Execute<'q, Self::Database>,
§fn execute_many<'e, 'q, E>(
self,
query: E,
) -> Pin<Box<dyn Stream<Item = Result<<Self::Database as Database>::QueryResult, Error>> + Send + 'e>>where
'q: 'e,
'c: 'e,
E: 'q + Execute<'q, Self::Database>,
fn execute_many<'e, 'q, E>(
self,
query: E,
) -> Pin<Box<dyn Stream<Item = Result<<Self::Database as Database>::QueryResult, Error>> + Send + 'e>>where
'q: 'e,
'c: 'e,
E: 'q + Execute<'q, Self::Database>,
§fn fetch<'e, 'q, E>(
self,
query: E,
) -> Pin<Box<dyn Stream<Item = Result<<Self::Database as Database>::Row, Error>> + Send + 'e>>where
'q: 'e,
'c: 'e,
E: 'q + Execute<'q, Self::Database>,
fn fetch<'e, 'q, E>(
self,
query: E,
) -> Pin<Box<dyn Stream<Item = Result<<Self::Database as Database>::Row, Error>> + Send + 'e>>where
'q: 'e,
'c: 'e,
E: 'q + Execute<'q, Self::Database>,
§fn fetch_all<'e, 'q, E>(
self,
query: E,
) -> Pin<Box<dyn Future<Output = Result<Vec<<Self::Database as Database>::Row>, Error>> + Send + 'e>>where
'q: 'e,
'c: 'e,
E: 'q + Execute<'q, Self::Database>,
fn fetch_all<'e, 'q, E>(
self,
query: E,
) -> Pin<Box<dyn Future<Output = Result<Vec<<Self::Database as Database>::Row>, Error>> + Send + 'e>>where
'q: 'e,
'c: 'e,
E: 'q + Execute<'q, Self::Database>,
Vec.§impl Migrate for PgConnection
impl Migrate for PgConnection
fn ensure_migrations_table( &mut self, ) -> Pin<Box<dyn Future<Output = Result<(), MigrateError>> + Send + '_>>
fn dirty_version( &mut self, ) -> Pin<Box<dyn Future<Output = Result<Option<i64>, MigrateError>> + Send + '_>>
fn list_applied_migrations( &mut self, ) -> Pin<Box<dyn Future<Output = Result<Vec<AppliedMigration>, MigrateError>> + Send + '_>>
fn lock( &mut self, ) -> Pin<Box<dyn Future<Output = Result<(), MigrateError>> + Send + '_>>
fn unlock( &mut self, ) -> Pin<Box<dyn Future<Output = Result<(), MigrateError>> + Send + '_>>
fn apply<'e, 'm>(
&'e mut self,
migration: &'m Migration,
) -> Pin<Box<dyn Future<Output = Result<Duration, MigrateError>> + Send + 'm>>where
'e: 'm,
fn revert<'e, 'm>(
&'e mut self,
migration: &'m Migration,
) -> Pin<Box<dyn Future<Output = Result<Duration, MigrateError>> + Send + 'm>>where
'e: 'm,
Auto Trait Implementations§
impl Freeze for PgConnection
impl !RefUnwindSafe for PgConnection
impl Send for PgConnection
impl Sync for PgConnection
impl Unpin for PgConnection
impl !UnwindSafe for PgConnection
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
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more