• Tom Lane's avatar
    Fix some oversights in expression dependency recording. · f3ea3e3e
    Tom Lane authored
    find_expr_references() neglected to record a dependency on the result type
    of a FieldSelect node, allowing a DROP TYPE to break a view or rule that
    contains such an expression.  I think we'd omitted this case intentionally,
    reasoning that there would always be a related dependency ensuring that the
    DROP would cascade to the view.  But at least with nested field selection
    expressions, that's not true, as shown in bug #14867 from Mansur Galiev.
    Add the dependency, and for good measure a dependency on the node's exposed
    collation.
    
    Likewise add a dependency on the result type of a FieldStore.  I think here
    the reasoning was that it'd only appear within an assignment to a field,
    and the dependency on the field's column would be enough ... but having
    seen this example, I think that's wrong for nested-composites cases.
    
    Looking at nearby code, I notice we're not recording a dependency on the
    exposed collation of CoerceViaIO, which seems inconsistent with our choices
    for related node types.  Maybe that's OK but I'm feeling suspicious of this
    code today, so let's add that; it certainly can't hurt.
    
    This patch does not do anything to protect already-existing views, only
    views created after it's installed.  But seeing that the issue has been
    there a very long time and nobody noticed till now, that's probably good
    enough.
    
    Back-patch to all supported branches.
    
    Discussion: https://postgr.es/m/20171023150118.1477.19174@wrigleys.postgresql.org
    f3ea3e3e
dependency.c 73.9 KB