PL/PgSQL: EXIT USING ROLLBACK

From: Marko Tiikkaja <marko(at)joh(dot)to>
To: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: PL/PgSQL: EXIT USING ROLLBACK
Date: 2014-07-26 17:14:01
Message-ID: 53D3E1D9.5060808@joh.to
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hello,

Today I'd like to present a way to get rid of code like this:

$$
BEGIN

BEGIN
INSERT INTO foo VALUES (1);
-- run some tests/checks/whatever
RAISE EXCEPTION 'OK';
EXCEPTION WHEN raise_exception THEN
IF SQLERRM <> 'OK' THEN
RAISE;
END IF;
END;

RETURN 'success';
END
$$

And replace it with code like this:

$$
BEGIN

<<testsomething>>
BEGIN
INSERT INTO foo VALUES (1);
-- run some tests/checks/whatever
EXIT USING ROLLBACK testsomething;
EXCEPTION WHEN others THEN
RAISE;
END;

RETURN 'success';
END
$$

I'm not set on the USING ROLLBACK syntax; it was the only thing I could
come up with that seemed even remotely sane and didn't break backwards
compatibility.

Thoughts? Patch attached, if someone cares.

.marko

Attachment Content-Type Size
plpgsql_using_rollback.v1.patch text/plain 14.8 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andres Freund 2014-07-26 17:17:59 Re: parametric block size?
Previous Message Fabien COELHO 2014-07-26 17:06:58 Re: parametric block size?