pub struct PostgresDriver { /* private fields */ }Expand description
Postgres implementation of MigrationDriver.
The pool must have at least 2 connections: one is reserved for the advisory lock,
and at least one more is needed for migration queries. PgPoolOptions::new().max_connections(2)
is the recommended minimum for CLI use.
Implementations§
Source§impl PostgresDriver
impl PostgresDriver
Sourcepub fn new(pool: PgPool, config: PostgresConfig) -> Result<Self>
pub fn new(pool: PgPool, config: PostgresConfig) -> Result<Self>
Create a new PostgresDriver.
§Errors
Returns Error::InvalidIdentifier if the table or schema name contains
characters outside [A-Za-z0-9_].
Returns Error::PoolTooSmall if the pool has fewer than 2 connections.
One connection is reserved for the advisory lock; all migration queries
need at least one more. With max_connections == 1 every pool.begin()
call would wait forever.
Trait Implementations§
Source§impl Debug for PostgresDriver
impl Debug for PostgresDriver
Source§impl MigrationDriver for PostgresDriver
impl MigrationDriver for PostgresDriver
Source§fn acquire_lock<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Box<dyn LockGuard>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn acquire_lock<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Box<dyn LockGuard>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Acquire an advisory lock. The lock is held until the returned guard is dropped.
Source§fn run_setup_sql<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
name: &'life1 str,
sql: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn run_setup_sql<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
name: &'life1 str,
sql: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Execute one 00_setup file’s SQL in a single transaction (untracked).
Source§fn ensure_tracking_table<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn ensure_tracking_table<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Ensure the deployment tracking table (and schema, if configured) exist.
Source§fn applied<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<AppliedMigration>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn applied<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<AppliedMigration>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Return all applied migrations, ordered by (version ASC, file ASC).
Source§fn apply<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
migration: &'life1 Migration,
up_sql: &'life2 str,
batch: i32,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn apply<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
migration: &'life1 Migration,
up_sql: &'life2 str,
batch: i32,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Apply a migration: run UP SQL AND insert the tracking row in ONE transaction.
The
up_sql is passed in rather than re-reading the file in the driver.Source§fn revert<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
applied: &'life1 AppliedMigration,
down_sql: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn revert<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
applied: &'life1 AppliedMigration,
down_sql: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Revert an applied migration: run
down_sql AND delete the tracking row in ONE transaction.Auto Trait Implementations§
impl !RefUnwindSafe for PostgresDriver
impl !UnwindSafe for PostgresDriver
impl Freeze for PostgresDriver
impl Send for PostgresDriver
impl Sync for PostgresDriver
impl Unpin for PostgresDriver
impl UnsafeUnpin for PostgresDriver
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§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>
Converts
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>
Converts
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