pgsql: Create infrastructure for "soft" error reporting.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Create infrastructure for "soft" error reporting.
Date: 2022-12-09 15:15:04
Message-ID: E1p3f5c-002gaT-0D@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Create infrastructure for "soft" error reporting.

Postgres' standard mechanism for reporting errors (ereport() or elog())
is used for all sorts of error conditions. This means that throwing
an exception via ereport(ERROR) requires an expensive transaction or
subtransaction abort and cleanup, since the exception catcher dare not
make many assumptions about what has gone wrong. There are situations
where we would rather have a lighter-weight mechanism for dealing
with errors that are known to be safe to recover from without a full
transaction cleanup. This commit creates infrastructure to let us
adapt existing error-reporting code for that purpose. See the
included documentation changes for details. Follow-on commits will
provide test code and usage examples.

The near-term plan is to convert most if not all datatype input
functions to report invalid input "softly". This will enable
implementing some SQL/JSON features cleanly and without the cost
of subtransactions, and it will also allow creating COPY options
to deal with bad input without cancelling the whole COPY.

This patch is mostly by me, but it owes very substantial debt to
earlier work by Nikita Glukhov, Andrew Dunstan, and Amul Sul.
Thanks also to Andres Freund for review.

Discussion: https://postgr.es/m/3bbbb0df-7382-bf87-9737-340ba096e034@postgrespro.ru

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/d9f7f5d32f201bec61fef8104aafcb77cecb4dcb

Modified Files
--------------
doc/src/sgml/ref/create_type.sgml | 11 +++
src/backend/nodes/Makefile | 1 +
src/backend/nodes/gen_node_support.pl | 2 +
src/backend/utils/error/elog.c | 123 ++++++++++++++++++++++++++++++++++
src/backend/utils/fmgr/README | 72 ++++++++++++++++++++
src/backend/utils/fmgr/fmgr.c | 65 ++++++++++++++++++
src/include/fmgr.h | 4 ++
src/include/nodes/meson.build | 1 +
src/include/nodes/miscnodes.h | 56 ++++++++++++++++
src/include/utils/elog.h | 61 +++++++++++++++++
src/tools/pgindent/typedefs.list | 1 +
11 files changed, 397 insertions(+)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2022-12-09 15:43:51 pgsql: Const-ify a couple of datetime parsing subroutines.
Previous Message Alexander Korotkov 2022-12-09 10:55:56 pgsql: Fix invalid role names introduced in 096dd80f3c