Estoy transfiriendo un código de alguna versión de Sybase a PostgreSQL. Esta es una aplicación C que utiliza la biblioteca de cliente Sybase. Mi enfoque es escribir una capa de traducción que traduzca las llamadas dbsqlexec()
a PQexec()
(por ejemplo). Esa parte está trabajando principalmente.
Parece que la base de datos Sybase está configurada en mayúsculas y minúsculas (con respecto a los nombres de los objetos de la base de datos). Por ejemplo, hay tanto una WIDGET
tabla como una widget
tabla. Parece que la convención en esta aplicación es que los nombres en mayúsculas indican las tablas de datos reales, mientras que los nombres en minúsculas se usan como tablas temporales cuando se ejecuta algún procesamiento.
De acuerdo con la Estructura léxica 4.1 , " Las palabras clave y los identificadores sin comillas no distinguen entre mayúsculas y minúsculas " . Sé que puedo hacer comillas dobles para deshabilitar el plegado automático en minúsculas, pero no quiero tener que hacerlo manualmente a través de los miles de millones de líneas. de código que usa esta base de datos.
¿Hay alguna manera de configurar PostgreSQL para deshabilitar este plegado automático de mayúsculas y minúsculas para los identificadores de objetos de la base de datos?
Mi alternativa será escribir un código que examine cada instrucción SQL y ponga comillas dobles alrededor de cada identificador (que no es una palabra clave).
fuente
select * from TaBlEnAmE
hará referencia a la misma tabla queselect * from tablename
oselect * from TABLENAME
create table "tableName" (id integer primary key);
, y luegocreate table "tablename" (id integer primary key);
esta consultaselect * from TaBlEnAmE;
seleccionará de "nombre de tabla", no de "nombre de tabla". "Los nombres sin comillas siempre están doblados a minúsculas" .Respuestas:
Terminé escribiendo un código que transforma el SQL generado por la aplicación en SQL compatible con PostgreSQL. Es bastante sencillo:
También aproveché esta capa para transformar las llamadas
isnull
acoalesce
. Hasta ahora está funcionando bastante bien.fuente
No directamente. Es posible que pueda realizar un cambio relativamente menor en el código fuente de PostgreSQL y volver a compilarlo. (Comience en src / backend / parser / parser.c?) Pero me sorprendería si fuera muy simple.
fuente