错误:无效的语言环境名称:“ 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';
Run Code Online (Sandbox Code Playgroud)
我知道这可能是多余的,因为我知道默认值为'en_US.etf-8'。删除LC_COLLATE和LC_CTYPE参数使我运行脚本。
那么对于V 10,语言环境定义是否有所改变?还是现在正在发生其他事情?我在Postgres 10手册中找不到任何相关内容。
我有同样的错误,我生成了新的语言环境:
locale-gen en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
我确认locale -a它确实存在,然后我注销只是为了确保,但我仍然在创建数据库时遇到相同的错误。
最后,我通过简单地重新启动 postgresql 服务器解决了这个错误:
sudo systemctl restart postgresql
Run Code Online (Sandbox Code Playgroud)
之后,数据库创建命令开始工作了!
它已经在 kubuntu 上执行并且运行完美,加上上面提到的一些额外步骤,正确的步骤应该是:
验证存在;如果不存在,则继续创建它(需要 sudo 权限)
locale -a |grep -i 'es_ES.utf-8'
sudo locale-gen es_PE.UTF-8
Run Code Online (Sandbox Code Playgroud)验证区域设置是否已创建。
locale -a|grep -i es
es_ES.utf8
es_PE.utf8
Run Code Online (Sandbox Code Playgroud)创建区域设置后,继续重新启动 postgres 服务,否则您将收到以下错误:
ERROR: invalid locale name: "es_ES.UTF-8"
Run Code Online (Sandbox Code Playgroud)重新启动 postgres 服务
systemctl restart postgresql
Run Code Online (Sandbox Code Playgroud)最后,数据库创建完成。
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
Run Code Online (Sandbox Code Playgroud)检查是否有可用的语言环境(locale -a如果找不到),请尝试手动添加:
locale-gen en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
在这之后
CREATE DATABASE db WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8';
Run Code Online (Sandbox Code Playgroud)
应该管用
对我来说帮助了接下来的步骤:
1. sudo locale-gen "en_US.UTF-8"
2. sudo dpkg-reconfigure locales
3. sudo systemctl restart postgresql
Run Code Online (Sandbox Code Playgroud)
我不知道为什么,但 locale-gen 不起作用。