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

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#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: 566
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