On Thu, Apr 9, 2026 at 10:27 AM SATYANARAYANA NARLAPURAM <[email protected]> wrote: > On Wed, Apr 8, 2026 at 11:00 PM Alexander Korotkov <[email protected]> > wrote: >> On Thu, Apr 9, 2026 at 5:03 AM SATYANARAYANA NARLAPURAM >> <[email protected]> wrote: >> > An assertion failure (server crash in assert-enabled builds) occurs when >> > WAIT FOR LSN ... INTO is used inside PL/pgSQL DO blocks or within void >> > procedures. >> > >> > Repro: >> > >> > -- Run this on a standby >> > >> > CREATE PROCEDURE test_wait() >> > LANGUAGE plpgsql AS $$ >> > DECLARE >> > result text; >> > BEGIN >> > WAIT FOR LSN '0/1234' INTO result; >> > RAISE NOTICE '%', result; >> > END; >> > $$; >> > CALL test_wait(); >> > >> > >> > The WAIT FOR itself succeeds, but the very next PL/pgSQL statement that >> > requires a snapshot crashes the backend with: >> > >> > TRAP: failed Assert("portal->portalSnapshot == NULL"), >> > File: "pquery.c", Line: 1776 >> > >> > Attached patches for both the test case and a potential fix. Please review. >> >> Thank you for reporting. But I doubt the fix is correct. Even that >> this particular might work OK, I don't think it's safe to release >> snapshots belonging to functions/procedures: it might affect them. I >> tend to think we must forbid wrapping WAIT FOR LSN with >> functions/procedures. I'll explore more on this today. > > > Agreed, attached a v2 patch with your suggestion on preventing it running > from procedures.
Thank you. I've slightly revised your patch. I'm going to push it if no objections. ------ Regards, Alexander Korotkov Supabase
v3-0001-Explicitly-forbid-WAIT-FOR-inside-functions-and-p.patch
Description: Binary data
