Re: Issue with ReRaise in PG - Mailing list pgsql-hackers

From Tom Lane
Subject Re: Issue with ReRaise in PG
Date
Msg-id 10149.1272038244@sss.pgh.pa.us
Whole thread Raw
In response to Issue with ReRaise in PG  (Piyush Newe <piyush.newe@enterprisedb.com>)
Responses Re: Issue with ReRaise in PG  (Heikki Linnakangas <heikki.linnakangas@enterprisedb.com>)
List pgsql-hackers
Piyush Newe <piyush.newe@enterprisedb.com> writes:
> Please consider the following test case

> CREATE OR REPLACE FUNCTION raisetest() returns void AS $$
>  BEGIN
>    BEGIN
>        RAISE syntax_error;
>    EXCEPTION
>        WHEN syntax_error THEN
>            BEGIN
>                raise notice 'exception thrown in inner block, reraising';
>                RAISE;
>            EXCEPTION
>                WHEN OTHERS THEN
>                    raise notice 'RIGHT - exception caught in innermost
> block';
>            END;
>    END;
>  EXCEPTION
>    WHEN OTHERS THEN
>        raise notice 'WRONG - exception caught in outer block';
>  END;
> $$ LANGUAGE plpgsql;

> select raisetest();
> NOTICE:  exception thrown in inner block, reraising
> NOTICE:  WRONG - exception caught in outer block

RAISE without parameters is only allowed inside an exception handler,
and what it throws is that handler's exception.  In this example, it is
within an exception handler ---- of the outer block.  So it's allowed,
but it re-throws from that handler.

We could possibly make the above case throw an "improperly placed RAISE"
error instead of doing what it does now, but I don't think there is a
good argument for having it do what you propose.
        regards, tom lane


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: BETA
Next
From: Terry Brown
Date:
Subject: psql: Add setting to make '+' on \d implicit