Skip to content

Deleting a corpus fails if there are budget entries linked to its processes

Sentry Issue: ARKINDEX-BACKEND-2QN

ForeignKeyViolation: UPDATE ou DELETE sur la table « process_process » viole la contrainte de clé étrangère « budget_budgetentry_process_id_c1a61224_fk_process_process_id » de la table « budget_budgetentry »
DETAIL:  La clé (id)=(042f11bb-10e5-4602-a534-0903e5c612c3) est toujours référencée à partir de la table « budget_budgetentry ».
  File "django/db/backends/utils.py", line 105, in _execute
    return self.cursor.execute(sql, params)
  File "psycopg/cursor.py", line 97, in execute
    raise ex.with_traceback(None)

IntegrityError: UPDATE ou DELETE sur la table « process_process » viole la contrainte de clé étrangère « budget_budgetentry_process_id_c1a61224_fk_process_process_id » de la table « budget_budgetentry »
DETAIL:  La clé (id)=(042f11bb-10e5-4602-a534-0903e5c612c3) est toujours référencée à partir de la table « budget_budgetentry ».
(7 additional frame(s) were not displayed)
...
  File "arkindex/documents/tasks.py", line 97, in corpus_delete

The process_id should be set to None on all budget entries related to a corpus' processes when that corpus gets deleted. We already have a on_delete=SET_NULL, so this already happens when deleting a process the normal way, but we need to do it ourselves on the corpus deletion task for performance reasons.