PG_FINALLY
authorPeter Eisentraut <peter@eisentraut.org>
Fri, 1 Nov 2019 10:09:52 +0000 (11:09 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Fri, 1 Nov 2019 10:18:03 +0000 (11:18 +0100)
commit604bd3671121b51f977de146ed95484c2297fb3e
tree829045453c054befb9d795c33765501e2f4522f3
parent73025140885c889410b9bfc4a30a3866396fc5db
PG_FINALLY

This gives an alternative way of catching exceptions, for the common
case where the cleanup code is the same in the error and non-error
cases.  So instead of

    PG_TRY();
    {
        ... code that might throw ereport(ERROR) ...
    }
    PG_CATCH();
    {
        cleanup();
PG_RE_THROW();
    }
    PG_END_TRY();
    cleanup();

one can write

    PG_TRY();
    {
        ... code that might throw ereport(ERROR) ...
    }
    PG_FINALLY();
    {
        cleanup();
    }
    PG_END_TRY();

Discussion: https://www.postgresql.org/message-id/flat/95a822c3-728b-af0e-d7e5-71890507ae0c%402ndquadrant.com
32 files changed:
contrib/auto_explain/auto_explain.c
contrib/dblink/dblink.c
contrib/hstore_plpython/hstore_plpython.c
contrib/jsonb_plpython/jsonb_plpython.c
contrib/pg_stat_statements/pg_stat_statements.c
contrib/pg_trgm/trgm_regexp.c
contrib/postgres_fdw/connection.c
contrib/postgres_fdw/postgres_fdw.c
contrib/sepgsql/hooks.c
contrib/sepgsql/label.c
contrib/sepgsql/selinux.c
contrib/sepgsql/uavc.c
src/backend/catalog/index.c
src/backend/commands/async.c
src/backend/commands/copy.c
src/backend/commands/event_trigger.c
src/backend/commands/extension.c
src/backend/commands/subscriptioncmds.c
src/backend/commands/trigger.c
src/backend/commands/vacuum.c
src/backend/libpq/be-fsstubs.c
src/backend/tcop/utility.c
src/backend/utils/adt/xml.c
src/include/utils/elog.h
src/pl/plperl/plperl.c
src/pl/plpgsql/src/pl_handler.c
src/pl/plpython/plpy_cursorobject.c
src/pl/plpython/plpy_elog.c
src/pl/plpython/plpy_exec.c
src/pl/plpython/plpy_spi.c
src/pl/plpython/plpy_typeio.c
src/pl/tcl/pltcl.c