Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 07/11/2019 12:23:55
- HadanMarv
- Membre
Interprétation de requête
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
#2 07/11/2019 13:05:05
- HadanMarv
- Membre
Re : Interprétation de requête
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
#3 08/11/2019 12:14:33
- gleu
- Administrateur
Re : Interprétation de requête
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
#4 08/11/2019 15:51:54
- HadanMarv
- Membre
Re : Interprétation de requête
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