make \d table Collation field showing domains collation if that attribute is type of domain. - Mailing list pgsql-hackers

From jian he
Subject make \d table Collation field showing domains collation if that attribute is type of domain.
Date
Msg-id CACJufxG-Ww0Hezx=AxMxsM_Wkdp+VbWwXQQKPD7uC7pzym+-+Q@mail.gmail.com
Whole thread Raw
Responses Re: make \d table Collation field showing domains collation if that attribute is type of domain.
List pgsql-hackers
$subject related demos:
CREATE COLLATION case_insensitive (provider = icu, locale =
'@colStrength=secondary', deterministic = false);
create domain d_colli as text collate case_insensitive;
create domain d_collc as d_colli collate "C";
create table  s1(a d_colli);
create table  s2(a d_colli[] collate "C");
create table  s3(a d_collc);


currently in HEAD:
\d s1
                 Table "public.s1"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 a      | d_colli |           |          |


\d s2
                  Table "public.s2"
 Column |   Type    | Collation | Nullable | Default
--------+-----------+-----------+----------+---------
 a      | d_colli[] | C         |          |


\d s3
                 Table "public.s3"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 a      | d_collc |           |          |


we can change it to
\d s1
                    Table "public.s1"
 Column |  Type   |    Collation     | Nullable | Default
--------+---------+------------------+----------+---------
 a      | d_colli | case_insensitive |          |


\d s2
                  Table "public.s2"
 Column |   Type    | Collation | Nullable | Default
--------+-----------+-----------+----------+---------
 a      | d_colli[] | C         |          |


\d s3
                 Table "public.s3"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 a      | d_collc | C         |          |


as you can see:
For non-domain types, everything is the same as before.
but domains with COLLATION clauses behave differently.


main changes:
@@ -1866,7 +1866,7 @@ describeOneTableDetails(const char *schemaname,
                attrdef_col = cols++;
                attnotnull_col = cols++;
                appendPQExpBufferStr(&buf, ",\n  (SELECT c.collname
FROM pg_catalog.pg_collation c, pg_catalog.pg_type t\n"
-                                                        "   WHERE
c.oid = a.attcollation AND t.oid = a.atttypid AND a.attcollation <>
t.typcollation) AS attcollation");
+                                                        "   WHERE
c.oid = a.attcollation AND t.oid = a.atttypid and c.collname <>
'default' ) AS attcollation");


it will make a table column with type "name", display Collation "C",
since "name" type typcollation is 'C',
other than this all behavior is the same as HEAD.


what do you think?



pgsql-hackers by date:

Previous
From: Alena Rybakina
Date:
Subject: Re: On disable_cost
Next
From: torikoshia
Date:
Subject: Re: Add on_error and log_verbosity options to file_fdw