如何使 postgres 中的语言环境可见?

How to make visible the locale in postgres?

我想知道是否可以使所选语言环境可见。我愿意(windows),

>bin\initdb --locale=en-us --encoding=utf-8 -U postgres -W clus1
>bin\pg_ctl.exe -D clus1 -l logfile2 start
>psql -U postgres
postgres=# select now();
              now
-------------------------------
  2022-03-07 21:15:07.56299+01

>bin\pg_ctl.exe -D clus1 -l logfile2 stop
>rmdir /s clus1

现在我选择另一个语言环境,

>bin\initdb --locale=nl-nl --encoding=utf-8 -U postgres -W clus1
>bin\pg_ctl.exe -D clus1 -l logfile2 start
>psql -U postgres
postgres=# select now();
              now
-------------------------------
 2022-03-07 21:16:30.071371+01

我原以为 now() 会用荷兰语,但事实并非如此。为什么不,我怎样才能使语言环境可见,所以请检查所选的语言环境?

语言环境由几个部分组成:

  • lc_collate: 比较和排序字符串的规则

  • lc_ctype:判断一个字符是什么类型的规则(字母,数字,space,...)

  • lc_messages: 错误和日志消息的语言

  • lc_monetaryto_char 数字

    中用于货币格式代码的语言

    要查看lc_monetary的效果,试试

    SELECT to_char(100, '999L');
    
  • lc_numeric:用于数字 to_char 中十进制逗号和组分隔符格式代码的语言

    要查看lc_numeric的效果,试试

    SELECT to_char(1000000.50, '9G999G999D00L');
    
  • lc_timeto_char 中时间戳 log_filename

    中星期几和月份名称格式代码使用的语言

    要查看lc_numeric的效果,试试

    SELECT to_char(current_timestamp, 'FMDAY, DD. FMMONTH');
    

您可以通过 SHOW:

找到它们每个的设置
SHOW lc_collate;

date/time 和数字数据类型的类型输出函数不使用语言环境设置,因此 now() 的输出不受语言环境影响。