[−][src]Struct sqlx::PgConnection
feature="postgres"
only.An asynchronous connection to a Postgres database.
The connection string expected by Connect::connect should be a PostgreSQL connection string, as documented at https://www.postgresql.org/docs/12/libpq-connect.html#LIBPQ-CONNSTRING
TLS Support (requires tls
feature)
This connection type supports the same sslmode
query parameter that libpq
does in
connection strings: https://www.postgresql.org/docs/12/libpq-ssl.html
postgresql://<user>[:<password>]@<host>[:<port>]/<database>[?sslmode=<ssl-mode>[&sslcrootcert=<path>]]
where
ssl-mode = disable | allow | prefer | require | verify-ca | verify-full
path = percent (URL) encoded path on the local machine
If the tls
feature is not enabled, disable
, allow
and prefer
are no-ops and require
,
verify-ca
and verify-full
are forbidden (attempting to connect with these will return
an error).
If the tls
feature is enabled, an upgrade to TLS is attempted on every connection by default
(equivalent to sslmode=prefer
). If the server does not support TLS (because it was not
started with a valid certificate and key, see https://www.postgresql.org/docs/12/ssl-tcp.html)
then it falls back to an unsecured connection and logs a warning.
Add sslmode=require
to your connection string to emit an error if the TLS upgrade fails.
If you're running Postgres locally, your connection string might look like this:
postgresql://root:password@localhost/my_database?sslmode=require
However, like with libpq
the server certificate is not checked for validity by default.
Specifying sslmode=verify-ca
will cause the TLS upgrade to verify the server's SSL
certificate against a local CA root certificate; this is not the system root certificate
but is instead expected to be specified in one of a few ways:
-
The path to the certificate can be specified by adding the
sslrootcert
query parameter to the connection string. (Remember to percent-encode it!) -
The path may also be specified via the
PGSSLROOTCERT
environment variable (which should not be percent-encoded.) -
Otherwise, the library will look for the Postgres global root CA certificate in the default location:
$HOME/.postgresql/root.crt
on POSIX systems%APPDATA%\postgresql\root.crt
on Windows
These locations are documented here: https://www.postgresql.org/docs/12/libpq-ssl.html#LIBQ-SSL-CERTIFICATES If the root certificate cannot be found by any of these means then the TLS upgrade will fail.
If sslmode=verify-full
is specified, in addition to checking the certificate as with
sslmode=verify-ca
, the hostname in the connection string will be verified
against the hostname in the server certificate, so they must be the same for the TLS
upgrade to succeed.
Trait Implementations
impl Connect for PgConnection
[src]
fn connect<T>(
url: T
) -> Pin<Box<dyn Future<Output = Result<PgConnection, Error>> + 'static + Send>> where
T: TryInto<Url, Error = ParseError>,
PgConnection: Sized,
[src]
url: T
) -> Pin<Box<dyn Future<Output = Result<PgConnection, Error>> + 'static + Send>> where
T: TryInto<Url, Error = ParseError>,
PgConnection: Sized,
impl Connection for PgConnection
[src]
fn close(
self
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + 'static + Send>>
[src]
self
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + 'static + Send>>
fn ping(&mut self) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send>>
[src]
fn begin(
self
) -> Pin<Box<dyn Future<Output = Result<Transaction<Self>, Error>> + 'static + Send>>
[src]
self
) -> Pin<Box<dyn Future<Output = Result<Transaction<Self>, Error>> + 'static + Send>>
impl Executor for PgConnection
[src]
type Database = Postgres
The specific database that this type is implemented for.
fn execute<'e, 'q, 'c, E>(
&'c mut self,
query: E
) -> Pin<Box<dyn Future<Output = Result<u64, Error>> + 'e + Send>> where
'q: 'e,
'c: 'e,
E: 'e + Execute<'q, <PgConnection as Executor>::Database>,
[src]
&'c mut self,
query: E
) -> Pin<Box<dyn Future<Output = Result<u64, Error>> + 'e + Send>> where
'q: 'e,
'c: 'e,
E: 'e + Execute<'q, <PgConnection as Executor>::Database>,
fn fetch<'q, E>(&mut self, query: E) -> PgCursor<'q> where
E: Execute<'q, <PgConnection as Executor>::Database>,
[src]
E: Execute<'q, <PgConnection as Executor>::Database>,
impl<'c> RefExecutor<'c> for &'c mut PgConnection
[src]
type Database = Postgres
fn fetch_by_ref<'q, E>(self, query: E) -> PgCursor<'c, 'q> where
E: Execute<'q, <&'c mut PgConnection as RefExecutor<'c>>::Database>,
[src]
E: Execute<'q, <&'c mut PgConnection as RefExecutor<'c>>::Database>,
Auto Trait Implementations
impl !RefUnwindSafe for PgConnection
impl Send for PgConnection
impl Sync for PgConnection
impl Unpin for PgConnection
impl !UnwindSafe for PgConnection
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Same<T> for T
type Output = T
Should always be Self
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,