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 !