• David Rowley's avatar
    Fix bogus EXPLAIN output for Hash Aggregate · d5e96520
    David Rowley authored
    9bdb300d modified the EXPLAIN output for Hash Aggregate to show details
    from parallel workers. However, it neglected to consider that a given
    parallel worker may not have assisted with the given Hash Aggregate. This
    can occur when workers fail to start or during Parallel Append with
    enable_partitionwise_join enabled when only a single worker is working on
    a non-parallel aware sub-plan. It could also happen if a worker simply
    wasn't fast enough to get any work done before other processes went and
    finished all the work.
    
    The bogus output came from the fact that ExplainOpenWorker() skipped
    showing any details for non-initialized workers but show_hashagg_info()
    did show details from the worker.  This meant that the worker properties
    that were shown were not properly attributed to the worker that they
    belong to.
    
    In passing, we also now don't show Hash Aggregate properties for the
    leader process when it did not contribute any work to the Hash Aggregate.
    This can occur either during Parallel Append when only a parallel worker
    worked on a given sub plan or with parallel_leader_participation set to
    off.  This aims to make the behavior of Hash Aggregate's EXPLAIN output
    more similar to Sort's.
    
    Reported-by: Justin Pryzby
    Discussion: https://postgr.es/m/20200805012105.GZ28072%40telsasoft.com
    Backpatch-through: 13, where the original breakage was introduced
    d5e96520
explain.c 132 KB