• Tom Lane's avatar
    Fix handling of "Subplans Removed" field in EXPLAIN output. · 7d91b604
    Tom Lane authored
    Commit 499be013 added this field in a rather poorly-thought-through
    manner, with the result being that rather than being a field of the
    Append or MergeAppend plan node as intended (and as it seems to be,
    in text format), it was actually an element of the "Plans" subgroup.
    At least in JSON format, that's flat out invalid syntax, because
    "Plans" is an array not an object.
    
    While it's not hard to move the generation of the field so that it
    appears where it's supposed to, this does result in a visible change
    in field order in text format, in cases where a Append or MergeAppend
    plan node has any InitPlans attached.  That's slightly annoying to
    do in stable branches; but the alternative of continuing to emit
    broken non-text formats seems worse.
    
    Also, since the set of fields emitted is not supposed to be
    data-dependent in non-text formats, make sure that "Subplans Removed"
    appears in Append and MergeAppend nodes even when it's zero, in those
    formats.  (The previous coding made it look like it could appear in
    some other node types such as BitmapAnd, but we don't actually support
    runtime pruning there, so don't emit it in those cases.)
    
    Per bug #16171 from Mahadevan Ramachandran.  Fix by Daniel Gustafsson
    and Tom Lane, reviewed by Hamid Akhtar.  Back-patch to v11 where this
    code came in.
    
    Discussion: https://postgr.es/m/16171-b72259ab75505fa2@postgresql.org
    7d91b604
partition_prune.out 148 KB