Re: We still claim "cannot begin/end transactions in PL/pgSQL"

From: Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: We still claim "cannot begin/end transactions in PL/pgSQL"
Date: 2018-05-31 12:01:10
Message-ID: b964bd07-65e2-5949-70dc-974332ad24fd@2ndquadrant.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 5/25/18 12:16, Tom Lane wrote:
> I notice there are still several places in pl_exec.c like this:
>
> case SPI_ERROR_TRANSACTION:
> ereport(ERROR,
> (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
> errmsg("cannot begin/end transactions in PL/pgSQL"),
> errhint("Use a BEGIN block with an EXCEPTION clause instead.")));
> break;
>
> At best, the wording of these error messages is now obsolete. I'm not
> sure if we expect them to be reachable at all. If they should be
> can't-happen cases, I'd suggest just deleting them and letting control
> fall to the generic default: cases in each switch. If they are reachable,
> the messages need work.

There are three occurrences:

The occurrence in exec_prepare_plan() could never be reached AFAICT,
because SPI_prepare_params() does not produce those SPI_prepare_params()
error values in the first place. So remove them altogether.

The occurrence in exec_stmt_execsql() can be reached by running for
example SAVEPOINT, or any other TransactionStmt other than COMMIT and
ROLLBACK, which are intercepted by PL/pgSQL. So we still need an error
message there. Unfortunately, we don't know which TransactionStmt
caused the error, so the error has to be pretty generic.

The occurrence in exec_stmt_dynexecute() can be reached using something
like EXECUTE 'COMMIT', which is not supported/not implemented. Hence a
tweaked error message there as well.

Possible patch attached.

--
Peter Eisentraut http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Attachment Content-Type Size
0001-Reword-SPI_ERROR_TRANSACTION-errors-in-PL-pgSQL.patch text/plain 2.5 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message MauMau 2018-05-31 12:12:32 Re: I'd like to discuss scaleout at PGCon
Previous Message Andrew Gierth 2018-05-31 06:00:28 Re: json results parsing