Sommario esecutivo: PostgreSQL è sorprendente, ma ci troviamo di fronte a molti problemi al lavoro dovuti al fatto che posticipa molti controlli sul codice PL/pgSQL fino al runtime . C'è un modo per renderlo più simile al PL/SQL di Oracle a questo riguardo?PostgreSQL vs Oracle: controllo "in fase di compilazione" di PL/pgSQL
Per esempio ...
Prova l'esecuzione di questo in qualsiasi Oracle DB:
create function foo return number as
begin
select a from dual;
return a;
end;
Oracle immediatamente (cioè a tempo di compilazione !) Risponde con:
[Error] ORA-00904: invalid identifier
Ora prova la cosa semanticamente equivalente in PostgreSQL:
Lo vedrete sfortunatamente! - Esegui bene ... Nessun errore è segnalato.
Ma quando poi si tenta di chiamare questa funzione (cioè a runtime) si otterrà:
ERROR: column "a" does not exist
LINE 1: select a
C'è un modo per forzare PostgreSQL per eseguire l'analisi della sintassi e il controllo in fase di definizione di funzione - non in fase di esecuzione? Abbiamo tonnellate di codice PL/SQL legacy al lavoro, che stiamo trasferendo a PostgreSQL - ma la mancanza dei controlli in fase di compilazione è molto doloroso, costringendoci a fare il lavoro manuale - cioè scrivere codice per testare tutti i percorsi di codice in tutti funzioni/procedure, altrimenti automatizzate in Oracle.
In tema di test, suggerirei immediatamente il poster originale a http://pgtap.org/ e rendere la sua vita * molto * più facile. –