commit ca1a9e26d82815c35e0814824d1083bbe56347f9
parent f3a1385aee241dcbf6a513d5926eae4cd7872e88
Author: BlackDex <black.dex@gmail.com>
Date: Mon, 9 Oct 2023 20:19:57 +0200
Remove `SET CONSTRAINTS` during postgres migration
The PostgreSQL migrations do not need this setting.
I tested this by running an old Vaultwarden instance (v1.18.0) on a new
PostrgreSQL database, created a few users and some vault items, after
that run the new code and it doesn't break.
Fixes #3930
Diffstat:
1 file changed, 1 insertion(+), 13 deletions(-)
diff --git a/src/db/mod.rs b/src/db/mod.rs
@@ -479,21 +479,9 @@ mod postgresql_migrations {
pub const MIGRATIONS: EmbeddedMigrations = embed_migrations!("migrations/postgresql");
pub fn run_migrations() -> Result<(), super::Error> {
- use diesel::{Connection, RunQueryDsl};
+ use diesel::Connection;
// Make sure the database is up to date (create if it doesn't exist, or run the migrations)
let mut connection = diesel::pg::PgConnection::establish(&crate::CONFIG.database_url())?;
- // Disable Foreign Key Checks during migration
-
- // FIXME: Per https://www.postgresql.org/docs/12/sql-set-constraints.html,
- // "SET CONSTRAINTS sets the behavior of constraint checking within the
- // current transaction", so this setting probably won't take effect for
- // any of the migrations since it's being run outside of a transaction.
- // Migrations that need to disable foreign key checks should run this
- // from within the migration script itself.
- diesel::sql_query("SET CONSTRAINTS ALL DEFERRED")
- .execute(&mut connection)
- .expect("Failed to disable Foreign Key Checks during migrations");
-
connection.run_pending_migrations(MIGRATIONS).expect("Error running migrations");
Ok(())
}