• Tom Lane's avatar
    Fix testing of parallel-safety of SubPlans. · 39151781
    Tom Lane authored
    is_parallel_safe() supposed that the only relevant property of a SubPlan
    was the parallel safety of the referenced subplan tree.  This is wrong:
    the testexpr or args subtrees might contain parallel-unsafe stuff, as
    demonstrated by the test case added here.  However, just recursing into the
    subtrees fails in a different way: we'll typically find PARAM_EXEC Params
    representing the subplan's output columns in the testexpr.  The previous
    coding supposed that any Param must be treated as parallel-restricted, so
    that a naive attempt at fixing this disabled parallel pushdown of SubPlans
    altogether.  We must instead determine, for any visited Param, whether it
    is one that would be computed by a surrounding SubPlan node; if so, it's
    safe to push down along with the SubPlan node.
    
    We might later be able to extend this logic to cope with Params used for
    correlated subplans and other cases; but that's a task for v11 or beyond.
    
    Tom Lane and Amit Kapila
    
    Discussion: https://postgr.es/m/7064.1492022469@sss.pgh.pa.us
    39151781
select_parallel.sql 4.12 KB