PG_RE_THROW is mandatory (was Re: jsonpath)

Поиск
Список
Период
Сортировка
От Alvaro Herrera
Тема PG_RE_THROW is mandatory (was Re: jsonpath)
Дата
Msg-id 20190206160958.GA22304@alvherre.pgsql
обсуждение исходный текст
Ответы Re: PG_RE_THROW is mandatory (was Re: jsonpath)  (Andres Freund <andres@anarazel.de>)
Re: PG_RE_THROW is mandatory (was Re: jsonpath)  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
In https://postgr.es/m/1676.1548726280@sss.pgh.pa.us Tom Lane wrote:

> Sure: every errcode we have is unsafe to treat this way.
> 
> The backend coding rule from day one has been that a thrown error requires
> (sub)transaction cleanup to be done to make sure that things are back in a
> good state.  You can *not* just decide that it's okay to ignore that,
> especially not when invoking code outside the immediate area of what
> you're doing.

elog.h claims that PG_RE_THROW is "optional":

/*----------
 * API for catching ereport(ERROR) exits.  Use these macros like so:
 *
 *        PG_TRY();
 *        {
 *            ... code that might throw ereport(ERROR) ...
 *        }
 *        PG_CATCH();
 *        {
 *            ... error recovery code ...
 *        }
 *        PG_END_TRY();
 *
 * (The braces are not actually necessary, but are recommended so that
 * pgindent will indent the construct nicely.)    The error recovery code
 * can optionally do PG_RE_THROW() to propagate the same error outwards.

This is obviously wrong; while we have a couple of codesites that omit
it, it's not a generally available coding pattern.  I think we should
amend that comment.  I propose: "The error recovery code must normally
do PG_RE_THROW() to propagate the error outwards; failure to do so may
leave the system in an inconsistent state for further processing."

Other wording proposals welcome, but I don't want to leave it as is.

-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Andreas Karlsson
Дата:
Сообщение: Re: Feature: temporary materialized views
Следующее
От: Thomas Munro
Дата:
Сообщение: Re: Undo logs