Je porte du code d'une version de Sybase vers PostgreSQL. Il s'agit d'une application C qui utilise la bibliothèque client Sybase. Mon approche consiste à écrire une couche de traduction qui traduit les appels dbsqlexec()
vers PQexec()
(par exemple). Cette partie fonctionne principalement.
Il semble que la base de données Sybase soit configurée en respectant la casse (en ce qui concerne les noms d'objets de la base de données). Par exemple, il y a à la fois une WIDGET
table et une widget
table. Il semble que la convention dans cette application est que les noms en majuscules indiquent les tables de données réelles, tandis que les noms en minuscules sont utilisés comme tables temporaires lors de l'exécution de certains traitements.
Selon 4.1 Structure lexicale , «les mots clés et les identifiants sans guillemets ne respectent pas la casse. » Je sais que je peux citer des identifiants pour désactiver le pliage automatique en minuscules, mais je ne veux pas avoir à le faire manuellement à travers les millions de lignes de code qui utilise cette base de données.
Existe-t-il un moyen de configurer PostgreSQL pour désactiver ce pliage automatique des cas pour les identificateurs d'objets de base de données?
Mon alternative sera d'écrire du code qui examine chaque instruction SQL et met des guillemets autour de chaque identifiant (qui n'est pas un mot-clé).
la source
select * from TaBlEnAmE
référencera la même table queselect * from tablename
ouselect * from TABLENAME
create table "tableName" (id integer primary key);
,create table "tablename" (id integer primary key);
puis cette requêteselect * from TaBlEnAmE;
sélectionnera à partir de "nom de table", pas de "nom de table". "Les noms sans guillemets sont toujours pliés en minuscules" .Réponses:
J'ai fini par écrire du code qui transforme le SQL généré par l'application en SQL compatible PostgreSQL. C'est assez simple:
J'ai également profité de cette couche pour transformer les appels
isnull
verscoalesce
. Jusqu'à présent, cela fonctionne plutôt bien.la source
Pas directement. Vous pourrez peut- être apporter une modification relativement mineure au code source de PostgreSQL et le recompiler. (Commencer dans src / backend / parser / parser.c?) Mais je serais surpris si c'était très simple.
la source