On Fri, Apr 15, 2022, at 11:58 AM, Christoph Berg wrote:
> When running psql 15 against PG 14, the output is this:
> 
> $ psql -l
>                                                 List of databases
>    Name    │  Owner   │ Encoding │  Collate   │   Ctype    │ ICU Locale │ 
> Locale Provider │   Access privileges
> ───────────┼──────────┼──────────┼────────────┼────────────┼────────────┼─────────────────┼───────────────────────
> postgres  │ postgres │ UTF8     │ de_DE.utf8 │ de_DE.utf8 │ de_DE.utf8 │ libc 
>            │
> template0 │ postgres │ UTF8     │ de_DE.utf8 │ de_DE.utf8 │ de_DE.utf8 │ libc 
>            │ =c/postgres          ↵
>            │          │          │            │            │            │     
>             │ postgres=CTc/postgres
> template1 │ postgres │ UTF8     │ de_DE.utf8 │ de_DE.utf8 │ de_DE.utf8 │ libc 
>            │ =c/postgres          ↵
>            │          │          │            │            │            │     
>             │ postgres=CTc/postgres
> (3 rows)
> 
> The "ICU Locale" column is now populated, that seems wrong.
Good catch!

> The problem is in the else branch in src/bin/psql/describe.c around
> line 900:
> 
> +   if (pset.sversion >= 150000)
> +       appendPQExpBuffer(&buf,
> +                         "       d.daticulocale as \"%s\",\n"
> +                         "       CASE d.datlocprovider WHEN 'c' THEN 'libc' 
> WHEN 'i' THEN 'icu' END AS \"%s\",\
> +                         gettext_noop("ICU Locale"),
> +                         gettext_noop("Locale Provider"));
> +   else
> +       appendPQExpBuffer(&buf,
> +                         "       d.datcollate as \"%s\",\n"  <--- there
> +                         "       'libc' AS \"%s\",\n",
> +                         gettext_noop("ICU Locale"),
> +                         gettext_noop("Locale Provider"));
> 
> I'd think this should rather be
> 
> +                         "       '' as \"%s\",\n"
Since dataiculocale allows NULL, my suggestion is to use NULL instead of an
empty string. It is consistent with a cluster whose locale provider is libc.


--
Euler Taveira
EDB   https://www.enterprisedb.com/

Reply via email to