• Tom Lane's avatar
    Fix crash when columns have been added to the end of a view. · d5b760ec
    Tom Lane authored
    expandRTE() supposed that an RTE_SUBQUERY subquery must have exactly
    as many non-junk tlist items as the RTE has column aliases for it.
    This was true at the time the code was written, and is still true so
    far as parse analysis is concerned --- but when the function is used
    during planning, the subquery might have appeared through insertion
    of a view that now has more columns than it did when the outer query
    was parsed.  This results in a core dump if, for instance, we have
    to expand a whole-row Var that references the subquery.
    
    To avoid crashing, we can either stop expanding the RTE when we run
    out of aliases, or invent new aliases for the added columns.  While
    the latter might be more useful, the former is consistent with what
    expandRTE() does for composite-returning functions in the RTE_FUNCTION
    case, so it seems like we'd better do it that way.
    
    Per bug #14876 from Samuel Horwitz.  This has been busted since commit
    ff1ea217 allowed views to acquire more columns, so back-patch to all
    supported branches.
    
    Discussion: https://postgr.es/m/20171026184035.1471.82810@wrigleys.postgresql.org
    d5b760ec
alter_table.sql 88.5 KB