• Tom Lane's avatar
    Fix misbehavior of CTE-used-in-a-subplan during EPQ rechecks. · 159efe4a
    Tom Lane authored
    An updating query that reads a CTE within an InitPlan or SubPlan could get
    incorrect results if it updates rows that are concurrently being modified.
    This is caused by CteScanNext supposing that nothing inside its recursive
    ExecProcNode call could change which read pointer is selected in the CTE's
    shared tuplestore.  While that's normally true because of scoping
    considerations, it can break down if an EPQ plan tree gets built during the
    call, because EvalPlanQualStart builds execution trees for all subplans
    whether they're going to be used during the recheck or not.  And it seems
    like a pretty shaky assumption anyway, so let's just reselect our own read
    pointer here.
    
    Per bug #14870 from Andrei Gorita.  This has been broken since CTEs were
    implemented, so back-patch to all supported branches.
    
    Discussion: https://postgr.es/m/20171024155358.1471.82377@wrigleys.postgresql.org
    159efe4a
eval-plan-qual.out 8.22 KB