• Peter Eisentraut's avatar
    Disable anonymous record hash support except in special cases · 054adca6
    Peter Eisentraut authored
    Commit 01e658fa added hash support for row types.  This also added
    support for hashing anonymous record types, using the same approach
    that the type cache uses for comparison support for record types: It
    just reports that it works, but it might fail at run time if a
    component type doesn't actually support the operation.  We get away
    with that for comparison because most types support that.  But some
    types don't support hashing, so the current state can result in
    failures at run time where the planner chooses hashing over sorting,
    whereas that previously worked if only sorting was an option.
    
    We do, however, want the record hashing support for path tracking in
    recursive unions, and the SEARCH and CYCLE clauses built on that.  In
    that case, hashing is the only plan option.  So enable that, this
    commit implements the following approach: The type cache does not
    report that hashing is available for the record type.  This undoes
    that part of 01e658fa.  Instead, callers that require hashing no
    matter what can override that result themselves.  This patch only
    touches the callers to make the aforementioned recursive query cases
    work, namely the parse analysis of unions, as well as the hash_array()
    function.
    Reported-by: default avatarSait Talha Nisanci <sait.nisanci@microsoft.com>
    Bug: #17158
    Discussion: https://www.postgresql.org/message-id/flat/17158-8a2ba823982537a4%40postgresql.org
    054adca6
analyze.c 103 KB