PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Supprimer des lignes avec une clé étrangère dans PostgreSQL

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.