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 WIDGETtabela e uma widgettabela. 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 TaBlEnAmEirá referenciar a mesma tabela que select * from tablenameouselect * 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" .