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).
fonte
select * from TaBlEnAmE
irá referenciar a mesma tabela queselect * from tablename
ouselect * from TABLENAME
create table "tableName" (id integer primary key);
e, em seguidacreate table "tablename" (id integer primary key);
, esta consultaselect * from TaBlEnAmE;
selecionará "tablename", não "tableName". "Nomes sem aspas são sempre dobrados para minúsculas" .Respostas:
Acabei escrevendo um código que transforma o SQL gerado pelo aplicativo em SQL compatível com o PostgreSQL. É bem direto:
Eu também aproveitei essa camada para transformar chamadas
isnull
paracoalesce
. Até agora, está funcionando muito bem.fonte
Não diretamente. Você pode fazer uma alteração relativamente pequena no código fonte do PostgreSQL e recompilá-lo. (Comece em src / back-end / parser / parser.c?) Mas eu ficaria surpreso se fosse muito simples.
fonte