Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 Re : Général » Trigger et Fonction spatiale » 29/06/2012 16:28:20
Effectivement ça marche mieux. (Heureusement qu'on arrive en fin de semaine ...)
merci à vous deux pour votre aide !
kenrio, je tacherai de me documenter sur le search_path
pour ceux que ça intéresse voici le code de la fonction qui fonctionne: (le trigger reste inchangé)
CREATE OR REPLACE FUNCTION mob.update_nom_sct()
RETURNS trigger AS
$BODY$BEGIN
select into new.nom_sct nom_sct from mob.secteur_urba where st_within(new.geom, geom);
return new ;
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION mob.update_nom_sct()
OWNER TO postgres;
Bon week end !!
#2 Re : Général » Trigger et Fonction spatiale » 29/06/2012 16:02:27
A priori non puisque je référence ma fonction par le composant schéma (mob).
#3 Re : Général » Trigger et Fonction spatiale » 29/06/2012 15:32:54
bonjour kenrio,
J'ai tester votre solution, mais ça ne fonctionne pas mieux
je continue a chercher ...
#4 Général » Trigger et Fonction spatiale » 29/06/2012 14:54:20
- Thomas
- Réponses : 8
Bonjour à la communauté !
Je fais mes premiers pas sur PostgreSQL9.1/PostGis (avec PgadminIII). et je découvre le PL/pgSQL
J'ai 2 tables de type géométriques :
La table *mob_velo* de type ponctuel. et la table *secteur_urba* de type surfacique avec le nom du secteur contenu dans le champ *nom_sct*
Je dois rapatrier l'attribut *nom_sct* dans la table *mob_velo* par jointure spatiale. (le point est contenu dans la surface). Puisque je veux qu'à chaque création de points, le nom du secteur apparaisse ou se mette à jour, j'ai créer une fonction :
CREATE OR REPLACE FUNCTION mob.update_nom_sct()
RETURNS trigger AS
$BODY$BEGIN
select into NEW.nom_sct nom_sct from secteur_urba where st_within(NEW.geom, geom);
return NEW ;
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION mob.update_nom_sct()
OWNER TO postgres;
et un trigger sur la table a updater :
CREATE TRIGGER update_nom_sct
BEFORE INSERT OR UPDATE
ON mob.mob_velo
FOR EACH ROW
EXECUTE PROCEDURE mob.update_nom_sct();
Dans l'environnement client (QGIS), lorsque je saisi un point, j'ai ce message d'erreur :
ERREUR: la relation « secteur_urba » n'existe pas
LINE 1: select nom_sct from secteur_urba where st_w...
^
QUERY: select nom_sct from secteur_urba where st_within(NEW.geom, geom)
CONTEXT: PL/pgSQL function "update_nom_sct" line 2 at instruction SQL
Auriez vous déjà rencontré ce genre de problème ? J'ai beaucoup cherché sur internet, mais aucune solution à mon problème.
merci de votre aide qui me sera très precieuse pour avancer .
Thomas
Pages : 1