Pour automatiser cela, vous pouvez définir la contrainte de clé étrangère avec ON DELETE CASCADE
.
Je cite le le manuel pour contraintes de clé étrangère
:
Recherchez la définition FK actuelle comme ceci :
SELECT pg_get_constraintdef(oid) AS constraint_def
FROM pg_constraint
WHERE conrelid = 'public.kontakty'::regclass -- assuming public schema
AND conname = 'kontakty_ibfk_1';
Ajoutez ou modifiez ensuite le ON DELETE ...
partie à ON DELETE CASCADE
(en préservant tout le reste tel quel) dans une déclaration telle que :
ALTER TABLE kontakty
DROP CONSTRAINT kontakty_ibfk_1
, ADD CONSTRAINT kontakty_ibfk_1
FOREIGN KEY (id_osoby) REFERENCES osoby (id_osoby) ON DELETE CASCADE;
Il n'y a pas de ALTER CONSTRAINT
commande. Supprimez et recréez la contrainte dans un seul ALTER TABLE
pour éviter d'éventuelles conditions de concurrence avec un accès en écriture simultané.
Vous avez besoin des privilèges pour le faire, évidemment. L'opération prend un ACCESS EXCLUSIVE
verrouiller la table kontakty
et un SHARE ROW EXCLUSIVE
verrouiller la table osoby
.
Si vous ne pouvez pas ALTER
la table, puis suppression à la main (une fois) ou par trigger BEFORE DELETE
(à chaque fois) sont les options restantes.