Re: BUG #18859: ERROR: unexpected plan node type: 356

Andrei Lepikhov <lepihov@gmail.com>

From: Andrei Lepikhov <lepihov@gmail.com>
To: splarv@ya.ru, pgsql-bugs@lists.postgresql.org, PG Bug reporting form <noreply@postgresql.org>
Date: 2025-03-21T12:58:54Z
Lists: pgsql-bugs
On 20/3/2025 14:53, PG Bug reporting form wrote:
> The following bug has been logged on the website:
> 
> Bug reference:      18859
> Logged by:          Olleg Samoylov
> Email address:      splarv@ya.ru
> PostgreSQL version: 17.4
> Operating system:   RedOS 8
> Description:
> 
> This working.
> postgres=> do $$ declare p_CurData refcursor; begin OPEN p_CurData FOR
> SELECT NULL::int id; end;$$;
> DO
> But this is not. Internal error.
> postgres=> do $$ declare p_CurData refcursor; begin OPEN p_CurData SCROLL
> FOR SELECT NULL::int id; end;$$;
> ERROR:  unexpected plan node type: 356
> CONTEXT:  PL/pgSQL function inline_code_block line 1 at OPEN
> 
It may be reproduced with any expression, treated as a simple 
expression. For example:

DO $$
DECLARE
  p_CurData refcursor;
BEGIN
  OPEN p_CurData SCROLL FOR SELECT now();
END; $$;

The problem here is in the scrollable cursors code which inserts 
Material node:

	if (cursorOptions & CURSOR_OPT_SCROLL)
	{
		if (!ExecSupportsBackwardScan(top_plan))
			top_plan = materialize_finished_plan(top_plan);
	}

But the exec_save_simple_expr() doesn't process Material node and causes 
the ERROR.

-- 
regards, Andrei Lepikhov



Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Fix plpgsql's handling of simple expressions in scrollable cursors.