PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 02/07/2012 10:29:58

Tetranos
Membre

Insertion d'une quote avec Postgre 9.1

Bonjour,

Nous sommes en train de rendre nos applicatifs compatibles avec Postgre SQL.
Pour nous connecter (et pour ceux qui connaissent) nous utilisons SQLDirect. Ce composant se charge d'échapper les ' avant l'insertion.
La syntaxe utilisée par ce composant est \' (au lieu de ''). D'après la documentation ceci est correct :

"Also, a single quote can be included in an escape string by writing \', in addition to the normal way of ''."

Mais on obtient pourtant une erreur SQL. J'ai essayé de faire le test avec pgAdmim et j'obtiens la même erreur :

INSERT INTO TEST1(TS1_INT, TS1_VARCHAR) VALUES (10, 'aujourd\'hui')
ERREUR:  erreur de syntaxe sur ou près de « hui »
LINE 1: ...TO TEST1(TS1_INT, TS1_VARCHAR) VALUES (10, 'aujourd\'hui')


********** Erreur **********

ERREUR: erreur de syntaxe sur ou près de « hui »
État SQL :42601
Caractère : 65


Y'a t'il une option à activer quelque part ?

Merci

Hors ligne

#2 02/07/2012 10:34:48

gleu
Administrateur

Re : Insertion d'une quote avec Postgre 9.1

À priori, vous utilisez la version 9.1 de PostgreSQL. En 9.1, le paramètre standard_conforming_strings est à on par défaut, ce qui occasionne ce genre de problème. Le passer à off permettra d'éviter ce problème, mais vous aurez des messages WARNING dans vos traces. Le mieux est évidemment que les développements de SQLDirect comprennent que l'utilisation des antislashs n'est pas standard et que la bonne façon de faire est d'utiliser deux guillemets simples.


Guillaume.

Hors ligne

#3 02/07/2012 14:04:13

Tetranos
Membre

Re : Insertion d'une quote avec Postgre 9.1

Merci Gleu,

Ca fonctionne correctement avec le paramètre à off.
Concernant SQLDirect, ce composant permet d'attaquer différentes bases, nous l'utilisons notamment pour Oracle, MSSql et MySQL. Je pense que le code d'échappement en \' est commun à tous les moteurs.
En dehors du Warning, pourquoi préconise t'on l'utilisation du '' à la place du \'. Y'a des contraintes de perfos dernière ?

Hors ligne

#4 02/07/2012 15:13:19

gleu
Administrateur

Re : Insertion d'une quote avec Postgre 9.1

C'est préconisé car le standard SQL l'impose. Par contre, aucune contrainte de perfs.


Guillaume.

Hors ligne

#5 05/07/2012 10:14:21

Marc Cousin
Membre

Re : Insertion d'une quote avec Postgre 9.1

Pour les autres, je ne sais pas. Mais Oracle utilise un ' pour escaper un ' (ça donne donc '' pour un quote dans une chaîne de caractères), comme l'impose le standard SQL.

Si j'ai bien compris, SQLDirect utilise odbc pour se connecter à PG ? Si c'est le cas, le problème pourrait tout simplement venir d'une version obsolète du driver odbc: les versions les plus récentes prennent en compte standard_conforming_strings pour faire l'escaping comme il faut. D'après les release notes du driver odbc, c'est pris en compte depuis la version 08.02.0402.


Marc.

Hors ligne

Pied de page des forums