• Tom Lane's avatar
    Avoid producing over-length specific_name outputs in information_schema. · 5bbee34d
    Tom Lane authored
    information_schema output columns that are declared as being type
    sql_identifier are supposed to conform to the implementation's rules
    for valid identifiers, in particular the identifier length limit.
    Several places potentially violated this limit by concatenating a
    function's name and OID.  (The OID is added to ensure name uniqueness
    within a schema, since the spec doesn't expect function name overloading.)
    
    Simply truncating the concatenation result to fit in "name" won't do,
    since losing part of the OID might wind up giving non-unique results.
    Instead, let's truncate the function name as necessary.
    
    The most practical way to do that is to do it in a C function; the
    information_schema.sql script doesn't have easy access to the value
    of NAMEDATALEN, nor does it have an easy way to truncate on the basis
    of resulting byte-length rather than number of characters.
    
    (There are still a couple of places that cast concatenation results to
    sql_identifier, but as far as I can see they are guaranteed not to produce
    over-length strings, at least with the normal value of NAMEDATALEN.)
    
    Discussion: https://postgr.es/m/23817.1545283477@sss.pgh.pa.us
    5bbee34d
information_schema.sql 108 KB