Hi Richard, On Sun, Sep 20, 2026 at 7:02 PM Richard Guo <[email protected]> wrote: > > Fuzzing with Claude reported this bug: > > create table pt (a int) partition by range (a); > create table pt1 partition of pt for values from (0) to (3); > create table pt2 partition of pt for values from (3) to (5); > create table t (a int); > > select * from pt where a = (null::int in (select a from t))::int; > ERROR: SubPlan found with no parent plan > > This one is interesting. In the testexpr of the SubPlan, we have the > NULL arg and the strict comparison operator =, so the whole testexpr > is const-folded to const NULL, which means the PARAM_EXEC Param is > const-folded away. As a result, match_clause_to_partition_key() > treats it as usable for executor-startup pruning, so the expression > ends up in initial_pruning_steps, where ExecDoInitialPruning() has to > evaluate it before any PlanState exists.
Good catch. > I think the simplest fix is to just disallow expressions containing > SubPlans for executor-startup pruning, like attached. There may well > be a better approach, though. Thanks for the patch. I am failing to see another approach that would be simpler or better, so +1 to what you have here. -- Thanks, Amit Langote
