Avoid producing over-length specific_name outputs in information_schema.
Tom Lane <tgl@sss.pgh.pa.us>
Avoid producing over-length specific_name outputs in information_schema. 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
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/catalog/information_schema.sql | modified | +11 −9 |
| src/backend/utils/adt/name.c | modified | +35 −0 |
| src/include/catalog/catversion.h | modified | +1 −1 |
| src/include/catalog/pg_proc.dat | modified | +4 −0 |
Discussion
- slow queries over information schema.tables 21 messages · 2018-12-04 → 2018-12-21