Commit ec410c98 authored by Tom Lane's avatar Tom Lane

Use elog, not Assert, to report failure to provide an outer snapshot.

As of commit 84f5c290, executing SQL commands (via SPI or otherwise)
requires having either an active Portal, or a caller-established
active snapshot.  We were simply Assert'ing that that's the case.
But we've now had a couple different reports of people testing
extensions that didn't meet this requirement, and were confused by
the resulting crash.  Let's convert the Assert to a test-and-elog,
in hopes of making the issue clearer for extension authors.

Per gripes from Liu Huailing and RekGRpth.  Back-patch to v11,
like the prior commit.

Discussion: https://postgr.es/m/OSZPR01MB6215671E3C5956A034A080DFBEEC9@OSZPR01MB6215.jpnprd01.prod.outlook.com
Discussion: https://postgr.es/m/17035-14607d308ac8643c@postgresql.org
parent 0d6b8749
......@@ -1758,7 +1758,8 @@ EnsurePortalSnapshotExists(void)
/* Otherwise, we'd better have an active Portal */
portal = ActivePortal;
Assert(portal != NULL);
if (unlikely(portal == NULL))
elog(ERROR, "cannot execute SQL without an outer snapshot or portal");
Assert(portal->portalSnapshot == NULL);
/* Create a new snapshot and make it active */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment