use sqlx::{Acquire, PgPool, Postgres};
use tracing::instrument;
static MIGRATOR: sqlx::migrate::Migrator = sqlx::migrate!();
#[instrument(level = "debug", skip(conn))]
pub async fn run_migrations<'a, A>(conn: A) -> Result<(), sqlx::Error>
where
A: Acquire<'a, Database = Postgres>,
{
let mut tx = conn.begin().await?;
sqlx::query("CREATE SCHEMA IF NOT EXISTS fx_durable_ga;")
.execute(&mut *tx)
.await?;
sqlx::query("SET LOCAL search_path TO fx_durable_ga;")
.execute(&mut *tx)
.await?;
MIGRATOR.run(&mut *tx).await?;
tx.commit().await?;
Ok(())
}
#[instrument(level = "debug", skip(pool))]
pub async fn run_default_migrations(pool: &PgPool) -> anyhow::Result<()> {
let mut tx = pool.begin().await?;
fx_event_bus::run_migrations(&mut tx).await?;
fx_mq_jobs::run_migrations(&mut tx, fx_mq_jobs::FX_MQ_JOBS_SCHEMA_NAME).await?;
run_migrations(&mut tx).await?;
tx.commit().await?;
Ok(())
}