PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 21/03/2017 23:15:38

annesig
Membre

PostGIS Trigger et update de deux tables ayant une relation spatiale

Bonjour,

Je dispose de deux couches géographiques gérées sous PostGIS.
L'une est de type polygones. L'autre contient des points.
Il existe une relation entre ces deux tables : les points sont positionnés dans les polygones.

Je souhaiterais écrire un déclencheur et sa fonction de telle manière que :
pour chaque mise à jour de la colonne géométrique ou insertion dans la table qui contient les polygones,
la tables des points soient également mise à jour.

Cette table de points contient un champ "id_polygon".
Je souhaiterais que ce champ se remplisse ainsi automatiquement à partir des valeurs id des polygones au sein desquels il sont positionnés.

De quelle manière procéderiez-vous ?
Je vous remercie par avance

Hors ligne

#2 22/03/2017 16:55:09

annesig
Membre

Re : PostGIS Trigger et update de deux tables ayant une relation spatiale

J'ai trouvé la réponse grâce à de l'aide sur le forum GEOREZO.
Je la dépose ici aussi au cas où cela aiderai quelqu'un ;-)

En imaginant une table "commune" et une table "points"

Code de la fonction :

CREATE OR REPLACE FUNCTION public.maj()
  RETURNS trigger AS
$BODY$
DECLARE
BEGIN

IF TG_OP = 'INSERT' or TG_OP = 'UPDATE' THEN
  update public.points set id_commune = public.commune.gid FROM public.commune where st_within (points.geometrie, commune.geometrie);

END IF;
return     NEW; 
END;$BODY$
  LANGUAGE plpgsql VOLATILE SECURITY DEFINER
  COST 100;
ALTER FUNCTION public.maj()
  OWNER TO postgres;

Code du trigger :

CREATE TRIGGER trigger_maj
  AFTER INSERT OR UPDATE OF geometrie
  ON public.commune
  FOR EACH ROW
  EXECUTE PROCEDURE public.maj();

Hors ligne

Pied de page des forums