Pages: 1
- Sujet précédent - [PostgreSQL 8.4] impossible d'exploiter une règle ON DELETE - Sujet suivant
#1 Thu 29 August 2013 11:35
- JP LLORENS
- Participant assidu
- Date d'inscription: 12 Nov 2008
- Messages: 231
[PostgreSQL 8.4] impossible d'exploiter une règle ON DELETE
Bonjour.
Je n'arrive pas à faire fonctionner une règle ON DELETE sur une table.
Contexte : j'ai une table avec des tronçons de voie (programmation) avec un identifiant (id_programme) jointe à une table de matériaux (program_materiaux) (jointure sur id_programme) qui recense pour chaque programme le type de matériaux utilisé, le volume et le prix au m3.
Je souhaite, lors de la suppression d'un matériau dans ma table, mettre à jour le champs montant (somme des volumes*prix par matériau) de ma table programmation.
Règle utilisée sur la table des matériaux :
CREATE OR REPLACE RULE "_DELETE" AS
ON DELETE TO program_materiaux DO UPDATE programmation SET montant = foo.somme
FROM ( SELECT a.id_programme, sum(b.tonnage::numeric * b.cout_tonne) AS somme
FROM programmation a
RIGHT JOIN program_materiaux b ON a.id_programme = b.id_programme
GROUP BY a.id_programme, a.montant) foo
WHERE foo.id_programme = programmation.id_programme;
Lors de la suppression d'une ligne de ma table matériaux, rien ne se passe sur mes programmations.
Ne maîtrisant pas les triggers, j'ai utilisé les règles, mais là je ne vois pas d'où vient le problème.
Merci par avance de votre aide.
JP Llorens
Hors ligne
#2 Thu 29 August 2013 14:31
- JP LLORENS
- Participant assidu
- Date d'inscription: 12 Nov 2008
- Messages: 231
Re: [PostgreSQL 8.4] impossible d'exploiter une règle ON DELETE
J'ai trouvé la cause du problème.
La règle est bien prise en compte, mais pour les règles on update et on delete, la requête originale ( delete from ma table) est réalisée après l'action ajoutée par ma règle => postgres fait donc mes sommes définies dans ma règle, et ensuite lance le delete !
Si je crée une règle on insert avec la même requête, cela fonctionne parfaitement, et pour cause, il ajoute puis recalcule !
JPL
Hors ligne
Pages: 1
- Sujet précédent - [PostgreSQL 8.4] impossible d'exploiter une règle ON DELETE - Sujet suivant