$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?