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 →
-
Fix plpgsql's handling of simple expressions in scrollable cursors.
- c196c610b339 14.18 landed
- a28c1fb619bf 16.9 landed
- 7fe312f6092f 18.0 landed
- 5e56efa7c0e0 15.13 landed
- 1353b1161a79 17.5 landed
- 0f60e1fba137 13.21 landed