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


Reply via email to