Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 Re : Général » PostGIS Trigger et update de deux tables ayant une relation spatiale » 22/03/2017 16:55:09
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();
#2 Général » PostGIS Trigger et update de deux tables ayant une relation spatiale » 21/03/2017 23:15:38
- annesig
- Réponses : 1
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
#3 Re : Général » Fonction qui exploite TG_TABLE_SCHEMA & TG_TABLE_NAME » 21/03/2017 23:14:29
Merci pour cette piste.
Je regarde si je m'en sors.
A.
#4 Général » Fonction qui exploite TG_TABLE_SCHEMA & TG_TABLE_NAME » 21/03/2017 14:51:42
- annesig
- Réponses : 2
Bonjour,
J'ai une base de données pour laquelle toutes les tables métiers dispose d'un même champ "datemaj" (pour date de la dernière mise à jour).
Je souhaite mettre en place une fonction qui me permettrait grâce à un trigger de mettre ce champ à jour automatiquement.
Je pensais :
- créer une fonction générique qui met à jour le champ "datemaj" de la table qui a déclenché la fonction avec une fonction "current_date"
- créer un trigger pour chq table qui lance cette fonction après un INSERT ou un UPDATE FOR tous les champs sauf "datemaj"
Pour les triggers pas de soucis
Pour la fonction, je rencontre un problème.
J'ai écrit :
CREATE OR REPLACE FUNCTION metier.mafonction()
RETURNS trigger AS
$BODY$
DECLARE
identifiant INTEGER;
BEGIN
identifiant := NEW.objectid;
IF (TG_OP = 'UPDATE') THEN
UPDATE TG_TABLE_SCHEMA.TG_TABLE_NAME
SET datemaj = current_date
WHERE objectid = identifiant;
RETURN NEW;
ELSIF (TG_OP = 'INSERT') THEN
UPDATE TG_TABLE_SCHEMA.TG_TABLE_NAME
SET datemaj = current_date
WHERE objectid = identifiant;
RETURN NEW;
ELSE
RAISE WARNING '[metier.mafonction] - Other action occurred: %, at %', TG_OP,now();
RETURN NULL;
END IF;
END;
$BODY$
Et lorsque j'effectue une modification dans la table, j'obtiens le message d'erreur suivant :
TG_TABLE_SCHEMA.TG_TABLE_NAME n'existe pas
Merci d'avance pour votre aide :-)
Anne
Pages : 1