Przesyłam trochę kodu z jakiejś wersji Sybase do PostgreSQL. Jest to aplikacja C korzystająca z biblioteki klienta Sybase. Moje podejście polega na napisaniu warstwy tłumaczącej, która tłumaczy wywołania dbsqlexec()
na PQexec()
(na przykład). Ta część w większości działa.
Wygląda na to, że baza danych Sybase jest skonfigurowana z uwzględnieniem wielkości liter (w odniesieniu do nazw obiektów bazy danych). Na przykład istnieje zarówno WIDGET
stół, jak i widget
stół. Wygląda na to, że konwencją w tej aplikacji jest to, że wielkie litery wskazują rzeczywiste tabele danych, podczas gdy małe litery są używane jako tabele tymczasowe podczas wykonywania niektórych operacji.
Zgodnie z 4.1 Struktura leksykalna „ Słowa kluczowe i niecytowane identyfikatory nie uwzględniają wielkości liter. ” Wiem, że mogę cytować identyfikatory, aby wyłączyć automatyczne składanie do małych liter, ale nie chcę tego robić ręcznie przez zilliony linii kodu korzystającego z tej bazy danych.
Czy istnieje sposób skonfigurowania PostgreSQL w celu wyłączenia automatycznego składania spraw w przypadku identyfikatorów obiektów bazy danych?
Moją alternatywą będzie napisanie kodu, który bada każdą instrukcję SQL i umieszcza podwójne cudzysłowy wokół każdego identyfikatora (który nie jest słowem kluczowym).
źródło
select * from TaBlEnAmE
będzie odnosić się do tej samej tabeli coselect * from tablename
lubselect * from TABLENAME
create table "tableName" (id integer primary key);
, a następniecreate table "tablename" (id integer primary key);
to zapytanieselect * from TaBlEnAmE;
wybierze z „tablename”, a nie z „tableName”. „Niecytowane nazwiska są zawsze składane na małe litery” .Odpowiedzi:
Skończyło się na tym, że napisałem kod, który przekształca SQL generowany przez aplikację w SQL kompatybilny z PostgreSQL. To całkiem proste:
Skorzystałem również z tej warstwy, aby przekształcić połączenia
isnull
docoalesce
. Jak dotąd działa całkiem dobrze.źródło
Nie bezpośrednio. Być może będziesz w stanie wprowadzić stosunkowo niewielką zmianę w kodzie źródłowym PostgreSQL i ponownie go skompilować. (Rozpocznij w src / backend / parser / parser.c?) Ale byłbym zaskoczony, gdyby było to bardzo proste.
źródło