Estou portando algum código de alguma versão do Sybase para o PostgreSQL. Este é um aplicativo C que usa a biblioteca do cliente Sybase. Minha abordagem é escrever uma camada de tradução que traduz chamadas dbsqlexec()
para PQexec()
(por exemplo). Essa parte está funcionando principalmente.
Parece que o banco de dados Sybase está configurado de uma maneira que diferencia maiúsculas de minúsculas (com relação aos nomes dos objetos do banco de dados). Por exemplo, há uma WIDGET
tabela e uma widget
tabela. Parece que a convenção neste aplicativo é que os nomes em maiúsculas indicam as tabelas de dados reais, enquanto os nomes em minúsculas são usados como tabelas temporárias ao executar algum processamento.
De acordo com a 4.1 Estrutura Lexical , " Palavras-chave e identificadores não citados não diferenciam maiúsculas de minúsculas. " Eu sei que posso colocar aspas duplas nos identificadores para desativar a dobra automática em minúsculas, mas não quero fazer isso manualmente através de zilhões de linhas do código que usa esse banco de dados.
Existe uma maneira de configurar o PostgreSQL para desativar essa dobra automática de caso para identificadores de objeto de banco de dados?
Minha alternativa será escrever um código que examine cada instrução SQL e coloque aspas duplas em torno de cada identificador (que não é uma palavra-chave).
select * from TaBlEnAmE
irá referenciar a mesma tabela que select * from tablename
ouselect * from TABLENAME
create table "tableName" (id integer primary key);
e, em seguida create table "tablename" (id integer primary key);
, esta consulta select * from TaBlEnAmE;
selecionará "tablename", não "tableName". "Nomes sem aspas são sempre dobrados para minúsculas" .