Re: deviation of 12 from 10 or 11 - Mailing list pgsql-novice

From Tom Lane
Subject Re: deviation of 12 from 10 or 11
Date
Msg-id 575658.1595621329@sss.pgh.pa.us
Whole thread Raw
In response to deviation of 12 from 10 or 11  (bx <holybolt@rambler.ru>)
List pgsql-novice
bx <holybolt@rambler.ru> writes:
> Have upgraded 10 to 12, but have a some trouble with ::name(?) to ::text 
> conversion:
> ...
> But in 12 the results are 69 and 262. I'm think the ::name is more 
> "efficient" and ::text was converted to ::name ?

The column_name column of information_schema.columns is declared
as being of the domain type information_schema.sql_identifier.
Prior to v12 that was a domain over varchar:

/*
 * 5.5
 * SQL_IDENTIFIER domain
 */

CREATE DOMAIN sql_identifier AS character varying;

That was both inefficient and wrong, though, so now it's a domain
over name:

CREATE DOMAIN sql_identifier AS name;

It was inefficient because the underlying catalog columns exposed
through sql_identifier columns are generally of type name; forcibly
coercing them to varchar costs cycles and defeats query optimizations.
It was wrong because the SQL spec says that sql_identifier should
enforce the implementation's limits on identifier length, which
obviously plain varchar would not.

The applicability to your issue is that now the result of that CASE
construct is resolved as type name not type varchar, so it's constrained
to be no more than 63 bytes.  (Yeah, the ELSE result has priority
for determining the CASE's output type.  It's historical.)

            regards, tom lane



pgsql-novice by date:

Previous
From: bx
Date:
Subject: deviation of 12 from 10 or 11
Next
From: Chamath Sajeewa
Date:
Subject: Not null constraint in postgre