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

Comment écrire une règle de suppression sur une vue ?

Ce que vous voyez avec le problème de règle, c'est que le système de règles ne gère pas les données de manière atomique. La première suppression est exécutée quel que soit l'ordre des deux instructions dans la règle DO INSTEAD. La deuxième instruction n'est jamais exécutée, car la ligne à laquelle OLD.id fait référence a été supprimée de la vue. Vous pouvez utiliser un LEFT JOIN, mais cela ne vous aidera pas à cause de la conception de la table d'exemple (cela peut fonctionner sur votre schéma de base de données réel).

Le problème fondamental, selon moi, est que vous traitez le système de règles comme s'il s'agissait d'un déclencheur.

Votre meilleure option est d'utiliser des clés étrangères et ON DELETE CASCADE au lieu de règles. Avec eux, votre schéma d'exemple fonctionnerait également :vous n'auriez besoin que d'une suppression pour que la table parent se débarrasse de tous les enfants.