Hi hackers, Alexander,

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.

Thanks,
Satya

Attachment: 0002-Add-regression-tests-for-WAIT-FOR-LSN-inside-PL-pgSQ.patch
Description: Binary data

Attachment: 0001-Fix-assertion-failure-in-WAIT-FOR-LSN-when-used-insi.patch
Description: Binary data

Reply via email to