2008-10-15 6 views
0

Dans la base de données PostgreSQL 8.3, j'ai une table "bookings" référençant la table "booking_transactions" par ID. Alors que chaque réservation appartient à une seule transaction. Il est possible de supprimer les réservations de la base de données.Supprimer automatiquement la ligne de l'objet parent lorsque tous les enfants sont partis

Comment puis-je m'assurer qu'une ligne "booking_transactions" est automatiquement supprimée lorsque toutes les "réservations" qui la référencent ont disparu?

Je soupçonne qu'un déclencheur ON DELETE "réservations" ne fonctionnera pas, car il doit interroger les autres lignes de la table "réservations".

Répondre

0

Déclencher sur les "réservations" devrait fonctionner il n'y a aucun problème pour interroger la table elle-même dans la fonction de déclenchement.

+0

Oui, vous avez raison. Je dois avoir confondu avec les limitations CHECK. –

0

La fonction de déclenchement plpgsql suivant fait le travail

BEGIN 
DELETE FROM 
    booking_transactions bt 
WHERE 
    bt.id = OLD.transaction_id AND 
    NOT EXISTS (SELECT 1 FROM bookings b WHERE b.transaction_id = bt.id); 

RETURN OLD; 
END; 

Il doit être exécuté après la réservation SUPPRIMER

Questions connexes