On Sunday, May 8, 2022, Bryn Llewellyn <b...@yugabyte.com> wrote:

>
> «
> Note that ASSERT is meant for detecting program bugs, not for reporting
> ordinary error conditions. Use the RAISE statement, described above,
> for that.
> »
>
> But it takes quite a stretch of the imagination to infer that this means
> that the "assert_failure" exception cannot be handled.
>
>
Agreed.  But as the pl/pgsql section “trapping errors” notes:

“The special condition name OTHERS matches every error type except
QUERY_CANCELED and ASSERT_FAILURE. (It is possible, but often unwise, to
trap those two error types by name.)”

i.e.,  you must trap it explicitly, not as part of others.


> «
> If no condition name nor SQLSTATE is specified in a RAISE
> EXCEPTION command, the default is to use ERRCODE_RAISE_EXCEPTION (P0001).
> »
>
> The spelling "errcode_raise_exception()" makes it look like a built-in
> function.
>
>
The fix I’d do is remove the “ERRCODE_” from the front of the name since
that is an internal symbol that probably doesn’t even work in user code;
the actual condition name is just the “raise_exception” part.  That P0001
is simply the SQLSTATE for that name is perfectly clear to me and doesn’t
warrant the verbosity of the proposal to avoid.

David J.

Reply via email to