• T
    Fix improper matching of resjunk column names for FOR UPDATE in subselect. · e617f0d7
    Tom Lane 提交于
    Flattening of subquery range tables during setrefs.c could lead to the
    rangetable indexes in PlanRowMark nodes not matching up with the column
    names previously assigned to the corresponding resjunk ctid (resp. tableoid
    or wholerow) columns.  Typical symptom would be either a "cannot extract
    system attribute from virtual tuple" error or an Assert failure.  This
    wasn't a problem before 9.0 because we didn't support FOR UPDATE below the
    top query level, and so the final flattening could never renumber an RTE
    that was relevant to FOR UPDATE.  Fix by using a plan-tree-wide unique
    number for each PlanRowMark to label the associated resjunk columns, so
    that the number need not change during flattening.
    
    Per report from David Johnston (though I'm darned if I can see how this got
    past initial testing of the relevant code).  Back-patch to 9.0.
    e617f0d7
preptlist.c 10.5 KB