Message posté par : LucieBdD
----------------------------------------
Bonjour,
Je vous remercie pour votre retour.
ChatGPT a répondu partiellement à mon besoin, je n'étais pas si loin :
-----------------
Code :
CREATE OR REPLACE FUNCTION eau_potable.f_materiau_convert()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
DECLARE mapped_id INTEGER;
BEGIN
SELECT mat.id_ref INTO mapped_id
FROM eau_potable.tr_aep_branchement_materiau as mat
WHERE mat.brch_mat = NEW.brch_mat;
NEW.brch_mat := mapped_id::TEXT;
RETURN NEW;
END;
$function$
;
DROP TRIGGER e_materiau_convert ON eau_potable.tog_aep_branchement ;
CREATE TRIGGER e_materiau_convert BEFORE INSERT OR UPDATE ON
eau_potable.tog_aep_branchement
FOR EACH ROW EXECUTE FUNCTION eau_potable.f_materiau_convert() ;
-----------------
Avec les vrais noms de tables, je pense que vous comprendrez sur quoi je travail ;)
Je dois restructurer les données du service Eau et Assainissement (format GPKG) dans une
base PostgreSQL, base PostgreSQL où les libellés et structures de tables ne sont pas les
mêmes que dans les GPKG. J'ai créé un script Python qui me permet de faire ça
automatiquement, mais je bloquais sur les champs des tables PG qui demandent à recevoir
des identifiants de type INTEGER avec clé étrangère sur une table de référence alors que
l'input depuis le GPKG est de type varchar.
J'aurais bien aimé que mon trigger me permette d'accepter directement des INTEGER
au moment du INSERT INTO, mais j'ai l'impression que ce n'est pas possible.
Il faut donc que je transforme mon champ "brch_mat" (= chp1 dans mon premier
post) en varchar, que j'insère les données de mon GPKG (le trigger les transforme en
nombres mais de type varchar donc), puis que je re-transforme ma colonne
"brch_mat" en INTEGER après coup pour ensuite pouvoir créer une clé étrangère
qui fait le lien avec l'id_ref (= chp2 dans mon premier post) de ma table de
référence.
Du coup je pense que j'ai résolu mon problème, merci !
Bonne journée.
Bien cordialement,
Lucie
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=372663#p372663
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net