Estou portando algum código de alguma versão do Sybase para o PostgreSQL. Este é um aplicativo C que usa a biblioteca 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 com distinção entre maiúsculas e minúsculas (em relação aos nomes de 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 Estrutura Lexical 4.1 , " palavras-chave e identificadores sem aspas não diferenciam maiúsculas de minúsculas" . de código que usa esse banco de dados.
Existe uma maneira de configurar o PostgreSQL para desabilitar essa dobra automática de casos para identificadores de objeto de banco de dados?
Minha alternativa será escrever algum código que examine cada instrução SQL e coloque aspas duplas em cada identificador (isso não é uma palavra-chave).
Acabei escrevendo um código que transforma o SQL gerado pelo aplicativo em SQL compatível com PostgreSQL. É bem direto:
Também aproveitei essa camada para transformar as chamadas
isnull
paracoalesce
. Até agora está funcionando muito bem.Não diretamente. Você pode fazer uma alteração relativamente pequena no código-fonte do PostgreSQL e recompilá-lo. (Iniciar em src/backend/parser/parser.c?) Mas ficaria surpreso se fosse muito simples.