Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#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

 

Pied de page des forums

Powered by FluxBB