Trigger jointure entre deux tables postgresql
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:
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 !