Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Afin d'effectuer une "migration douce" terme à la mode il parait, j'essaie de mettre en place des triggers sur des tables pour que lors de l'insert ou la modification d'un enregistrement les données créer ou mises à jour soit recopier à l'identique dans une autre table ayant strictement la même structure mais dans un autre schéma.
Avec l'analyse du pg_tables et du pg_attribute j'arrive à généré la requête d'insert sans problème.
Le seul petit soucis, c'est que lors de l'appel du EXECUTE de ma requête généré il me dit à juste titre NEW.nomduchamp non reconnu car il voit çà comme un litteral et non comme une chaine que le moteur doit interprété.
l'erreur exacte est : missing FROM-clause entry for table "new"
J'arrive à générer un truc du style :
INSERT INTO public.MATABLE (field1, field2) values (NEW.field1, NEW.field2);
Je précise que je suis dans un trigger after insert or update.
D'avance merci de vos lumières
HadanMarv
Hors ligne
J'ai trouvé une solution toute simple :
maquery := INSERT INTO public.MATABLE (field1, field2) values ($1.field1, $1.field2);
Et ensuite :
EXECUTE maquery USING NEW;
C'était simple, fallait 'juste' savoir que c'était possible
Bonne journée,
HadanMarv
Hors ligne
On ne peut pas utiliser NEW dans la chaîne de caractère d'une requete dynamique. Du coup, soit vous faites directement :
maquery := 'INSERT INTO public.MATABLE (field1, field2) values ($1.field1, $1.field2)';
EXECUTE maquery USING NEW;
soit vous faites simplement
INSERT INTO public.MATABLE (field1, field2) values (NEW.field1, NEW.field2);
sans utiliser une chaîne et EXECUTE.
Guillaume.
Hors ligne
Autant pour moi erreur de typo effectivement maquery est bien une variable de type character varying dont la variable est "calculé" à partir d'une requête analysant le catalogue (pg_tables et pg_attributes).
Hors ligne
Pages : 1