Re: BUG #18778: Query planning fails in ExecInitExprRec with unrecognized node type
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: exclusion@gmail.com
Cc: pgsql-bugs@lists.postgresql.org
Date: 2025-01-16T23:35:34Z
Lists: pgsql-bugs
Attachments
- apply-setrefs-fixups-to-pruning-expressions.patch (text/x-diff) patch
PG Bug reporting form <noreply@postgresql.org> writes: > The following script: > CREATE TABLE t (id int, PRIMARY KEY (id)) PARTITION BY RANGE (id); > CREATE TABLE t0 PARTITION OF t FOR VALUES FROM (0) TO (1); > CREATE TABLE t1 PARTITION OF t FOR VALUES FROM (1) TO (2); > SELECT 1 FROM (SELECT EXISTS (SELECT 1 FROM t0 WHERE id = t00.id) AS b FROM > t0 t00) r, t > WHERE t.id > CASE WHEN jsonb_build_object(b) IS NULL THEN 1 ELSE 1 END; > fails with: > ERROR: XX000: unrecognized node type: 24 Thanks for the report! setrefs.c is supposed to remove AlternativeSubPlan nodes from the plan, but it's failing to do so here. Digging, the un-cleaned-up AlternativeSubPlan is inside the exec_pruning_steps of an Append node's part_prune_info, and I see that setrefs is totally unaware that those expressions might need processing. I think it ought to be applying fix_scan_expr to them, as per the attached. There are a bunch of tidying-up things that fix_scan_expr does, so I suspect that there may be more bug symptoms reachable from this oversight. Some of the missed processing may be redundant --- for example it's likely that record_plan_function_dependency is duplicative because functions used here would also be used elsewhere in the query. But it's hard to believe it all is. regards, tom lane
Commits
-
Fix setrefs.c's failure to do expression processing on prune steps.
- bf826ea06297 18.0 landed
- 94c02bd3345d 16.7 landed
- 724ebebb1104 15.11 landed
- 5f725648fa3b 14.16 landed
- 45004f527afa 13.19 landed
- 0671a71e0210 17.3 landed