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

Pour sécuriser votre compte sur les forums du GeoRezo, nous demandons de changer votre mot de passe.

Vous allez recevoir un message pour effectuer ce changement de mot de passe.

Merci de bien respecter les règles préconisées.

#1 Tue 31 July 2018 13:15

SIGCMC56
Participant occasionnel
Date d'inscription: 9 Jul 2018
Messages: 28

UPDATE sur un Trigger avec PostgreSQL

Bonjour,

Je travaille avec Postgresql et QGIS 2.18. J'essaye de faire fonctionner un Trigger qui permettrait la mise à jour des données saisies via une Vue dans QGIS.
Tout fonctionne pour l'insertion de nouvelles données, mais je n'arrive pas à mettre à jour ou supprimer.

Qgis me retourne le message d'erreur :  ERROR:  column reference "id_A" is ambiguous.

Le code de mon Trigger est le suivant :

Code:

CREATE OR REPLACE FUNCTION MonTrigger()
  RETURNS trigger AS
$BODY$
DECLARE id_A BIGINT;
BEGIN
    IF (TG_OP = 'INSERT') THEN SELECT nextval('seq_A') INTO NEW.id_A;
        
        INSERT INTO TableA (id_A, geom, num_A) 
               VALUES (NEW.id_A, NEW.geom, NEW.num_A);
      

    INSERT INTO TableB (A_id, num_B) 
               VALUES (NEW.id_A, NEW.num_B);
        RETURN NEW;
        
    ELSIF (TG_OP = 'UPDATE') THEN
           
           UPDATE TableA SET (geom, num_A) 
  
                 = (NEW.geom, NEW.num_A)
        WHERE id_A = NEW.id_A;

    UPDATE TableB SET (num_B) 
  
                 = (NEW.num_B)
        WHERE A_id = NEW.id_A;

            RETURN NEW;
    
     ELSIF (TG_OP = 'DELETE') THEN
        DELETE FROM TableA WHERE id_A = OLD.id_A;
    DELETE FROM TableB WHERE A_id = OLD.id_A;
    
       RETURN NULL;
    
 END IF;
END;
$BODY$

Quelqu'un peut-il m'aider?

Hors ligne

 

#2 Tue 31 July 2018 15:55

Ben22
Participant actif
Lieu: 33
Date d'inscription: 11 May 2016
Messages: 95

Re: UPDATE sur un Trigger avec PostgreSQL

Je me demande si le fait de déclarer votre variable utilisée pour la séquence de l'insert, du même nom que le champ identifiant qui sert dans le clause where de l'update ou le delete ne le gène pas ?!

Vous avez essayé en lui donnant un autre nom dans votre déclaration de variable ?

Hors ligne

 

#3 Tue 31 July 2018 16:20

jmarsac
Participant assidu
Lieu: NICE
Date d'inscription: 26 Oct 2005
Messages: 569
Site web

Re: UPDATE sur un Trigger avec PostgreSQL

Bonjour,

Sauf erreur, la ligne

Code:

DECLARE id_A BIGINT;

ne sert à rien et comme le dit Ben22 provoque certainement l'erreur. Ce serait plutôt (non testé)  :

Code:

CREATE OR REPLACE FUNCTION MonTrigger()
  RETURNS trigger AS
$BODY$

BEGIN
    IF (TG_OP = 'INSERT') THEN SELECT nextval('seq_A') INTO NEW.id_A;
        
        INSERT INTO TableA (id_A, geom, num_A) 
               VALUES (NEW.id_A, NEW.geom, NEW.num_A);
      

    INSERT INTO TableB (A_id, num_B) 
               VALUES (NEW.id_A, NEW.num_B);
        RETURN NEW;
        
    ELSIF (TG_OP = 'UPDATE') THEN
           
           UPDATE TableA SET (geom, num_A) 
  
                 = (NEW.geom, NEW.num_A)
        WHERE id_A = NEW.id_A;

    UPDATE TableB SET (num_B) 
  
                 = (NEW.num_B)
        WHERE A_id = NEW.id_A;

            RETURN NEW;
    
     ELSIF (TG_OP = 'DELETE') THEN
        DELETE FROM TableA WHERE id_A = OLD.id_A;
    DELETE FROM TableB WHERE A_id = OLD.id_A;
    
       RETURN NULL;
    
 END IF;
END;
$BODY$

Quelqu'un peut-il m'aider?

Jean-Marie
Azimut

Hors ligne

 

Pied de page des forums

Powered by FluxBB