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 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 sad
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

Pied de page des forums

Propulsé par FluxBB