PostgreSQL vs Oracle: verificação em tempo de compilação do PL / pgSQL
Sumário executivo: O PostgreSQL é incrível, mas estamos enfrentando muitos problemas no trabalho devido ao fato de adiar muitas verificações no código PL / pgSQL até o tempo de execução.Existe uma maneira de torná-lo mais parecido com o PL / SQL da Oracle a esse respeito?
Por exemplo...
Tente executar isso em qualquer banco de dados Oracle:
create function foo return number as
begin
select a from dual;
return a;
end;
A Oracle imediatamente (ou seja, emtempo de compilação!) responda com:
[Error] ORA-00904: invalid identifier
Agora tente a coisa semanticamente equivalente no PostgreSQL:
CREATE OR REPLACE FUNCTION public.foo ()
RETURNS integer AS
$body$
BEGIN
select a;
return a;
END;
$body$
LANGUAGE plpgsql;
Você verá - infelizmente! - execute bem ... Nenhum erro é relatado.
Mas quando você tenta chamar essa função (ou seja, emtempo de execução) você vai ter:
ERROR: column "a" does not exist
LINE 1: select a
Existe uma maneira de forçar o PostgreSQL a executar análise de sintaxe e verificação no tempo de definição da função - não no tempo de execução? Temos toneladas de código PL / SQL legado em funcionamento, que estamos portando para o PostgreSQL - mas a falta detempo de compilação As verificações são muito dolorosas, forçando-nos a fazer trabalho manual - ou seja, escrevendo código para testar todos os caminhos de código em todas as funções / procedimentos - que, de outra forma, eram automatizados no Oracle.