Linux上的PostgreSQL 10 - LC_COLLATE语言环境en_US.utf-8无效

时间:2018-04-11 19:31:42

标签: postgresql

  

错误:区域设置名称无效:" en_US.utf-8"

使用PostgreSQL 10运行Ubuntu服务器18.04 Beta 2.

在运行9.5版本的数据库创建脚本时,我现在看到了' en_US.UTF-8'作为语言环境:

CREATE DATABASE db WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8';

我知道这可能是多余的,因为我理解默认为' en_US.etf-8'。删除LC_COLLATE和LC_CTYPE参数让我运行我的脚本。

对于V 10,语言环境定义是否以某种方式发生了变化?或者现在还有其他事情发生了吗?我在Postgres 10手册中找不到任何相关内容。

4 个答案:

答案 0 :(得分:3)

如果找不到locale -a,请检查可用的区域设置,尝试手动添加:

locale-gen en_US.UTF-8 

之后

CREATE DATABASE db WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8';

应该有效

答案 1 :(得分:1)

它是在kubuntu上执行的,并且可以完美地工作,并且上面已经提到了一些其他步骤,正确的步骤应该是:

  1. 验证存在;如果不存在,请继续创建它(需要sudo权限)

    locale -a  |grep -i 'es_ES.utf-8'
    sudo locale-gen es_PE.UTF-8
    
  2. 验证是否创建了语言环境。

    locale -a|grep -i es
    es_ES.utf8
    es_PE.utf8
    
  3. 创建语言环境后,请重新启动postgres服务,否则您将收到以下错误:

    ERROR:  invalid locale name: "es_ES.UTF-8"
    
  4. 重新启动postgres服务

    systemctl restart postgresql
    
  5. 最后,数据库已创建。

    postgres=# create database db_izipay_prod with template=template0 encoding='utf8' lc_collate='es_ES.UTF-8' lc_ctype='es_ES.UTF-8' owner=postgres;
    CREATE DATABASE
    

答案 2 :(得分:0)

我有同样的错误,我生成了新的语言环境:

locale-gen en_US.UTF-8 

我用locale -a验证了它确实存在,然后我注销以确认,但是在创建数据库时仍然遇到相同的错误。

最后,我通过简单地重新启动postgresql服务器来解决了该错误:

sudo systemctl restart postgresql

之后,数据库创建命令开始工作了!

答案 3 :(得分:0)

在Docker容器中得到了相同的错误。这是我非交互式解决问题的方法。

RUN echo "en_US UTF-8 " >> /etc/locale.gen && locale-gen