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 <noreply@anthropic.com>
This commit is contained in:
Ivo Oskamp 2026-02-09 14:25:13 +01:00
parent f332e61288
commit ff4942272f

View File

@ -243,6 +243,15 @@ def settings_jobs_delete_orphaned():
{"job_ids": job_ids}, {"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) # Delete all orphaned jobs (runs/objects are cascaded via ORM relationships)
for job in orphaned_jobs: for job in orphaned_jobs:
db.session.delete(job) db.session.delete(job)