• Tom Lane's avatar
    Fix EXPLAIN's column alias output for mismatched child tables. · 55a1954d
    Tom Lane authored
    If an inheritance/partitioning parent table is assigned some column
    alias names in the query, EXPLAIN mapped those aliases onto the
    child tables' columns by physical position, resulting in bogus output
    if a child table's columns aren't one-for-one with the parent's.
    
    To fix, make expand_single_inheritance_child() generate a correctly
    re-mapped column alias list, rather than just copying the parent
    RTE's alias node.  (We have to fill the alias field, not just
    adjust the eref field, because ruleutils.c will ignore eref in
    favor of looking at the real column names.)
    
    This means that child tables will now always have alias fields in
    plan rtables, where before they might not have.  That results in
    a rather substantial set of regression test output changes:
    EXPLAIN will now always show child tables with aliases that match
    the parent table (usually with "_N" appended for uniqueness).
    But that seems like a net positive for understandability, since
    the parent alias corresponds to something that actually appeared
    in the original query, while the child table names didn't.
    (Note that this does not change anything for cases where an explicit
    table alias was written in the query for the parent table; it
    just makes cases without such aliases behave similarly to that.)
    Hence, while we could avoid these subsidiary changes if we made
    inherit.c more complicated, we choose not to.
    
    Discussion: https://postgr.es/m/12424.1575168015@sss.pgh.pa.us
    55a1954d
updatable_views.out 107 KB