From ff4942272ffda280140941f10303f74a591979c5 Mon Sep 17 00:00:00 2001 From: Ivo Oskamp Date: Mon, 9 Feb 2026 14:25:13 +0100 Subject: [PATCH] Fix foreign key constraint: unlink mails from jobs before deletion Added UPDATE to set mail_messages.job_id = NULL before deleting jobs to avoid foreign key constraint violation. The mail_messages table has a foreign key to jobs, so we must unlink them first. Complete correct order: 1. Clean up auxiliary tables 2. Unlink mails from jobs (SET job_id = NULL) 3. Delete jobs (cascades to runs) 4. Delete mails Co-Authored-By: Claude Sonnet 4.5 --- .../backupchecks/src/backend/app/main/routes_settings.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/containers/backupchecks/src/backend/app/main/routes_settings.py b/containers/backupchecks/src/backend/app/main/routes_settings.py index 29e4cb9..bbcd119 100644 --- a/containers/backupchecks/src/backend/app/main/routes_settings.py +++ b/containers/backupchecks/src/backend/app/main/routes_settings.py @@ -243,6 +243,15 @@ def settings_jobs_delete_orphaned(): {"job_ids": job_ids}, ) + # Unlink mails from jobs before deleting jobs + # mail_messages.job_id references jobs.id + _safe_execute( + text("UPDATE mail_messages SET job_id = NULL WHERE job_id IN :job_ids").bindparams( + bindparam("job_ids", expanding=True) + ), + {"job_ids": job_ids}, + ) + # Delete all orphaned jobs (runs/objects are cascaded via ORM relationships) for job in orphaned_jobs: db.session.delete(job)