aboutsummaryrefslogtreecommitdiffstats
path: root/atuin-server-postgres/src
diff options
context:
space:
mode:
Diffstat (limited to 'atuin-server-postgres/src')
-rw-r--r--atuin-server-postgres/src/lib.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/atuin-server-postgres/src/lib.rs b/atuin-server-postgres/src/lib.rs
index 0ad33076..6dc56fe4 100644
--- a/atuin-server-postgres/src/lib.rs
+++ b/atuin-server-postgres/src/lib.rs
@@ -16,6 +16,8 @@ use wrappers::{DbHistory, DbRecord, DbSession, DbUser};
mod wrappers;
+const MIN_PG_VERSION: u32 = 14;
+
#[derive(Clone)]
pub struct Postgres {
pool: sqlx::Pool<sqlx::postgres::Postgres>,
@@ -43,6 +45,25 @@ impl Database for Postgres {
.await
.map_err(fix_error)?;
+ // Call server_version_num to get the DB server's major version number
+ // The call returns None for servers older than 8.x.
+ let pg_major_version: u32 = pool
+ .acquire()
+ .await
+ .map_err(fix_error)?
+ .server_version_num()
+ .ok_or(DbError::Other(eyre::Report::msg(
+ "could not get PostgreSQL version",
+ )))?
+ / 10000;
+
+ if pg_major_version < MIN_PG_VERSION {
+ return Err(DbError::Other(eyre::Report::msg(format!(
+ "unsupported PostgreSQL version {}, minimum required is {}",
+ pg_major_version, MIN_PG_VERSION
+ ))));
+ }
+
sqlx::migrate!("./migrations")
.run(&pool)
.await