Considere o seguinte bloco (incompleto) de PL/pgSQL dentro de uma função:
CREATE OR REPLACE FUNCTION my_calc(myvar1 NUMERIC, myvar2 NUMERIC)
RETURNS NUMERIC
RETURNS NULL ON NULL INPUT
IMMUTABLE
LANGUAGE plpgsql
AS $$
BEGIN
RETURN some_third_party_function(myvar1, myvar2);
EXCEPTION WHEN internal_error THEN
IF SQLERRM LIKE 'KnownErrorPrefix:%' THEN
RETURN 0;
ELSE
-- Reraise the original exception here
RAISE EXCEPTION '%', SQLERRM;
END IF;
END
$$
Quando ocorre um erro imprevisto, esse código lançará uma nova exceção com a mesma mensagem. No entanto, não preservará o tipo ou contexto original.
Como posso aumentar novamente ou relançar a exceção original sem modificações?
Você pode usar
RAISE
sem nenhum parâmetro. Isso está documentado na página Erros e mensagens :