Bonjour,
Voici le problème que je rencontre.
Je dispose de deux tables situées dans une base de données postgresql : table 1 de type ponctuel : "toponyme_activites" avec notamment les champs : id, fid, geom, nature, graphie et une table 2 de type polygone : "zai" avec notamment les champs : id, fid, geom nature, toponyme
s'il y a des mises à jour sur le champ toponyme de la table 2 (create ou update), j'aimerais également récupérer certains champs associés à la toponymie d'une entité soit la nature, geom, et l'id. J'aimerais qu'une fois les mises à jour faites sur cette table, qu'elles soient répercutées sur la table 1 (ponctuel) en rajoutant une ligne par toponyme ajouté (associé à la nature, id et sa géométrie).
J'avais pensé à la mise en place d'un trigger pour la gestion des mises à jour entre les deux tables dans la base de données mais je n'ai abouti à aucun résultat concluant. Pour récupérer la géométrie dans la table 2 en ponctuel compatible avec la table 1, j'ai pensé faire un st_centroid(geom). Le trigger doit aussi être fonctionnel seulement si le champ "toponyme" de la table 2 n'est pas null et qu'il a donc bien été modifié.
Ci-dessous une des tentatives de code réalisée :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 DELIMITER $$ CREATE TRIGGER maj_zai AFTER INSERT OR UPDATE ON zai FOR EACH ROW BEGIN NEW.id:= (SELECT id FROM toponymie_activites WHERE id = NEW.id); RETURN NEW; NEW.nature:= (SELECT nature FROM toponymie_ativites WHERE nature = NEW.nature); RETURN NEW; IF NEW.toponyme is not null then NEW.toponyme := (SELECT graphie FROM toponymie_activites WHERE graphie = NEW.toponyme); RETURN NEW; NEW.geom:= (SELECT geom FROM toponymie_services_et_activites WHERE geom = NEW.st_centroid(geom); RETURN NEW; end; DELIMITER;
Merci beaucoup pour l'aide que vous pourriez m'apporter !
Partager