Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 15/06/2016 22:23:59
- Tetra
- Membre
[résolu] Fonction decode dans un trigger
Bonjour,
J'utilise une appli qui s'appuie sur une BDD dont une fonction trigger fait appel à la fonction decode.
Suivant la source de déclenchement du trigger, la fonction me retourne un résultat sous une forme différente sans que je sache expliquer pourquoi.
Pour mettre cela en évidence, j'ai modifié la fonction pour ajouter une ligne dans un table de log...le trigger ressemble à çà :
CREATE OR REPLACE FUNCTION update_utilisateur()
RETURNS trigger AS
$BODY$declare
(...)
tempvar varchar(50);
BEGIN
(...)
select decode('Ym9uam91cg==','base64') INTO tempvar;
insert into log (log) values (tempvar);
(...)
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Lorsque je modifie un utilisateur via l'application (connectée en ODBC), je vois dans le log PostgreSQL la requête suivante :
UPDATE utilisateur SET nom_utilisateur = 'depuisapp' WHERE nom_utilisateur IS NULL AND id_utilisateur = 18 AND pwd IS NULL
Je joue ensuite via pgAdmin la requête suivante :
UPDATE ctx_02.utilisateur SET nom_utilisateur = 'depuispgadmin' WHERE nom_utilisateur = 'depuisapp'
Suite à çà, le requête select * from log me retourne
1 - "\x626f6e6a6f7572"
2 - "bonjour"
Je suppose qu'en 1 ça correspond à "bonjour" en hexa mais qu'est ce qui peut expliquer cette différence ?
Idéalement, je voudrais toujours avoir le résultat tel que 2.
Merci,
Dernière modification par Tetra (17/06/2016 20:52:01)
Hors ligne
#2 16/06/2016 08:47:10
- Marc Cousin
- Membre
Re : [résolu] Fonction decode dans un trigger
La table «log» est déclarée comment (le type du champ log) ?
Et surtout, est-ce que vous pourriez voir ce que vaut bytea_output dans les deux cas (dans pgadmin et dans le driver odbc): exécutez show bytea_output, et affichez le résultat...
Marc.
Hors ligne
#3 17/06/2016 20:51:44
- Tetra
- Membre
Re : [résolu] Fonction decode dans un trigger
Merci Marc, vous aviez vu juste, c'est bien un problème de bytea_output.
En fait, je tente de faire fonctionner une appli conçue pour une version 8.2 sur une 9.4, cf. mon précédent post.
Or, le paramètre bytea_ouput est d'après ce que j'ai lu apparu en 9.
J'ai fixé le paramètre au niveau de la base (ALTER DATABASE mabase SET bytea_output='escape') et ainsi ça fonctionne.
Merci
Hors ligne
#4 17/06/2016 21:03:30
- Marc Cousin
- Membre
Re : [résolu] Fonction decode dans un trigger
OK. Vous auriez pu le forcer juste au niveau de la fonction trigger, au besoin (il suffit de le mettre dans sa déclaration)… bytea_output à hex est plus performant dans beaucoup de cas... c'est dommage de le forcer globalement si vous n'en avez pas besoin
Dernière modification par Marc Cousin (17/06/2016 21:03:57)
Marc.
Hors ligne
#5 01/08/2016 15:39:24
- Tetra
- Membre
Re : [résolu] Fonction decode dans un trigger
Merci pour ces précisions.
J'ai choisi d'appliquer le paramètre sur la base car comme je n'ai pas la maîtrise complète de l'ensemble des triggers je me dis que ça me permet d'approcher le plus possible le fonctionnement d'une version 8.2.
En toute logique, ce ne devrait pas affecter les performances des autres bases hébergées par le même moteur.
Hors ligne
Pages : 1