• Tom Lane's avatar
    Remove faulty support for MergeAppend plan with WHERE CURRENT OF. · a0efda88
    Tom Lane authored
    Somebody extended search_plan_tree() to treat MergeAppend exactly
    like Append, which is 100% wrong, because unlike Append we can't
    assume that only one input node is actively returning tuples.
    Hence a cursor using a MergeAppend across a UNION ALL or inheritance
    tree could falsely match a WHERE CURRENT OF query at a row that
    isn't actually the cursor's current output row, but coincidentally
    has the same TID (in a different table) as the current output row.
    
    Delete the faulty code; this means that such a case will now return
    an error like 'cursor "foo" is not a simply updatable scan of table
    "bar"', instead of silently misbehaving.  Users should not find that
    surprising though, as the same cursor query could have failed that way
    already depending on the chosen plan.  (It would fail like that if the
    sort were done with an explicit Sort node instead of MergeAppend.)
    
    Expand the clearly-inadequate commentary to be more explicit about
    what this code is doing, in hopes of forestalling future mistakes.
    
    It's been like this for awhile, so back-patch to all supported
    branches.
    
    Discussion: https://postgr.es/m/482865.1611075182@sss.pgh.pa.us
    a0efda88
execCurrent.c 12.9 KB