On Sun, Jun 18, 2023 at 10:57 PM Tom Lane <t...@sss.pgh.pa.us> wrote: > > James Coleman <jtc...@gmail.com> writes: > > Over in "Parallelize correlated subqueries that execute within each > > worker" [1} Richard Guo found a bug in the current version of my patch > > in that thread. While debugging that issue I've been wondering why > > Path's param_info field seems to be NULL unless there is a LATERAL > > reference even though there may be non-lateral outer params > > referenced. > > Per pathnodes.h: > > * "param_info", if not NULL, links to a ParamPathInfo that identifies outer > * relation(s) that provide parameter values to each scan of this path. > * That means this path can only be joined to those rels by means of nestloop > * joins with this path on the inside. ... > > We're only interested in this for params that are coming from other > relations of the same query level, so that they affect join order and > join algorithm choices. Params coming down from outer query levels > are much like EXTERN params to the planner: they are pseudoconstants > for any one execution of the current query level. > > This isn't just LATERAL stuff; it's also intentionally-generated > nestloop-with-inner-indexscan-cases. But it's not outer-level Params. > Even though those are also PARAM_EXEC Params, they are fundamentally > different animals for the planner's purposes.
Thanks for the explanation. I wonder if it'd be worth clarifying the comment slightly to hint in that direction (like the attached)? Thanks, James Coleman
v1-0001-Clarify-param_info-query-level.patch
Description: Binary data