Ich portiere Code von einer Version von Sybase nach PostgreSQL. Dies ist eine C-Anwendung, die die Sybase-Clientbibliothek verwendet. Mein Ansatz ist es, eine Übersetzungsschicht zu schreiben, die Aufrufe dbsqlexec()
an PQexec()
(zum Beispiel) übersetzt. Dieser Teil funktioniert meistens.
Es scheint, dass die Sybase-Datenbank in Groß- und Kleinschreibung eingerichtet ist (in Bezug auf Datenbankobjektnamen). Zum Beispiel gibt es sowohl eine WIDGET
Tabelle als auch eine widget
Tabelle. Es sieht so aus, als ob die Konvention in dieser Anwendung lautet, dass die Namen in Großbuchstaben die tatsächlichen Datentabellen angeben, während die Namen in Kleinbuchstaben als temporäre Tabellen verwendet werden, wenn eine Verarbeitung ausgeführt wird.
Nach 4.1 Lexical Structure „ Schlüsselwörter und Bezeichner ohne Anführungszeichen sind Groß- und Kleinschreibung. “ Ich weiß , dass ich zu deaktivieren automatischer Faltung Klein doppelten Anführungszeichen Bezeichner kann, aber ich will nicht haben , dass manuell durch die Myriaden von Linien von Code, der diese Datenbank verwendet.
Gibt es eine Möglichkeit, PostgreSQL so einzurichten, dass diese automatische Fallfaltung für Datenbankobjektkennungen deaktiviert wird?
Meine Alternative besteht darin, Code zu schreiben, der jede SQL-Anweisung untersucht und jeden Bezeichner in doppelte Anführungszeichen setzt (das ist kein Schlüsselwort).
quelle
select * from TaBlEnAmE
verweist auf die gleiche Tabelle wieselect * from tablename
oderselect * from TABLENAME
create table "tableName" (id integer primary key);
und danncreate table "tablename" (id integer primary key);
diese Abfrageselect * from TaBlEnAmE;
aus "Tabellenname" und nicht aus "Tabellenname" auswählen. "Nicht zitierte Namen werden immer in Kleinbuchstaben gefaltet" .Antworten:
Am Ende habe ich Code geschrieben, der das von der Anwendung generierte SQL in PostgreSQL-kompatibles SQL umwandelt. Es ist ziemlich einfach:
Ich habe diese Ebene auch genutzt, um Anrufe in
isnull
zu transformierencoalesce
. Bisher funktioniert es ziemlich gut.quelle
Nicht direkt. Möglicherweise können Sie den PostgreSQL-Quellcode relativ geringfügig ändern und neu kompilieren. (Beginnen Sie in src / backend / parser / parser.c?) Aber ich wäre überrascht, wenn es sehr einfach wäre.
quelle