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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 30 April 2014 16:00

Stych
Participant occasionnel
Date d'inscription: 24 Mar 2014
Messages: 15

Déclencheur trigger opérant sur plusieurs table

Bonjour,

Je suis étudiant (en stage) et je dois mettre en place une base de données sur postgres/postgis.
J'ai une base de donnée contenant plusieurs tables géométriques et UNE seule table contenant les métadonnées (données alphanumériques).
chaque table contenant une géométrie ne représente qu'une seul ligne dans la table métadonnée., et ont en commun le nom de la donnée (champs "nom_donnee").
Les tables ont les structures suivantes :

Code:

table_1 (Géométriques) 

CREATE TABLE trait_de_cote.dep56pwgs84
(
  nom_donnee character varying(80),
  nom_theme character varying(30),
  site character varying(50),
  date_creation date,
  date_etude character varying(15),
  auteur character varying(20),
  srid character varying(30),
  extension character varying(10),
  lien character varying(500),
  the_geom_wgs84 geometry(MultiPolygon,4326),
  id character varying(80) NOT NULL,
  CONSTRAINT dep56pwgs84_pkey PRIMARY KEY (id));

table_2 (métadonnées)

CREATE TABLE trait_de_cote.metadonnee_trait_de_cote
(
  nom_donnee character varying(80) NOT NULL,
  nom_theme character varying(30),
  site character varying(50),
  date_creation date,
  date_etude character varying(9),
  auteur character varying(20),
  srid character varying(30),
  extension character varying(10),
  lien character varying(500),
  CONSTRAINT metadonnee_trait_de_cote_pkey PRIMARY KEY (nom_donnee));

Ce que j'essaie de faire c'est de mettre a jour les champs de la table_1 en fonction de chaque insertion, mise à jour et suppression de la table_2.
J'ai pour l'instant réussis à créer un trigger qui fonctionne mais qui n'opère que sur une seule table à la fois.

Code trigger :

Code:

CREATE OR REPLACE FUNCTION process_trait_de_cote_atlantique() RETURNS TRIGGER AS $trait_de_cote_atlantique$
    DECLARE
     meta metadonnee_trait_de_cote.nom_donnee%type;
         
    BEGIN
        
        select into meta * from metadonnee_trait_de_cote where nom_donnee='trait_de_cote_atlantique' and new.nom_donnee='trait_de_cote_atlantique';

        IF (TG_OP = 'INSERT') and meta ='trait_de_cote_atlantique' THEN
    update trait_de_cote_atlantique set nom_donnee= new.nom_donnee, nom_theme=new.nom_theme, site= new.site, date_creation= new.date_creation, date_etude=new.date_etude, auteur= new.auteur, srid= new.srid, extension= new.extension, lien= new.lien;
            RETURN NEW;

    ELSIF (TG_op = 'UPDATE') and meta ='trait_de_cote_atlantique' THEN
    update trait_de_cote_atlantique set  nom_donnee= new.nom_donnee,nom_theme=new.nom_theme, site= new.site, date_creation= new.date_creation, date_etude=new.date_etude, auteur= new.auteur, srid= new.srid, extension= new.extension, lien= new.lien;
        RETURN NEW;

    ELSIF (TG_op = 'DELETE')and meta ='trait_de_cote_atlantique' THEN
    Drop table trait_de_cote_atlantique;
        RETURN OLD;
        END IF;
    RETURN NULL;
    END;
$trait_de_cote_atlantique$ LANGUAGE plpgsql;

CREATE TRIGGER trait_de_cote_atlantique
AFTER INSERT OR UPDATE OR DELETE ON metadonnee_trait_de_cote
    FOR EACH ROW EXECUTE PROCEDURE process_trait_de_cote_atlantique();

Ce que j'aimerai serait que le déclencheur du trigger puisse récupérer le nom de chaque table (possédant une géométrie) et opère une insertion, un update ou un delete si cela a été effectué dans la table métadonnée sur la ligne qui lui correspondant (donc en fonction de "nom_donnee").

J'avais tout d'abord pensé  à créer autant de triggers que j'ai de couches (114 au total -__-') mais cela n'automatise pas l'opération lors de l'ajout d'une nouvelle couche. On m'a donc conseillé de générer une variable qui contiendra le nom de la table à modifier. Ce que j'ai fait, mais la variable n'étant pas une relation existante de la base, rien ne s'effectue.
Je me tourne donc vers la communauté GeoRezo pour avoir quelques conseils et pistes de réflexions.
J'espère avoir été suffisament précis dans mes explications...

Merci d'avance pour d'éventuelles réponses. (y)

ps:J'ai parcourus les différents forums concernant les triggers mais j'avoue na pas avoir trouvé la solution à mon problème.

Stych.

Dernière modification par Stych (Wed 30 April 2014 16:00)

Hors ligne

 

Pied de page des forums

Powered by FluxBB