Skip to content

Commit 93f9969

Browse files
committed
Use elog, not Assert, to report failure to provide an outer snapshot.
As of commit 84f5c29, 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
1 parent 053ec4e commit 93f9969

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

src/backend/tcop/pquery.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1755,7 +1755,8 @@ EnsurePortalSnapshotExists(void)
17551755

17561756
/* Otherwise, we'd better have an active Portal */
17571757
portal = ActivePortal;
1758-
Assert(portal != NULL);
1758+
if (unlikely(portal == NULL))
1759+
elog(ERROR, "cannot execute SQL without an outer snapshot or portal");
17591760
Assert(portal->portalSnapshot == NULL);
17601761

17611762
/* Create a new snapshot and make it active */

0 commit comments

Comments
 (0)