首页 > 解决方案 > postgres createdb 语言环境问题

问题描述

由于以下原因,我在设置数据库时遇到了麻烦:

$ createdb -E UTF-8 -p 5432 nominatim
createdb: database creation failed: ERROR:  encoding "UTF8" does not match locale "en_US"
DETAIL:  The chosen LC_CTYPE setting requires encoding "LATIN1".
ERROR: Error executing external command: createdb -E UTF-8 -p 5432 nominatim

在 /etc/profile 中,我将语言环境设置为 en_US.UTF-8,当我将“语言环境”作为 postgres 用户(或我自己的用户)检查时,包括 LC_CTYPE 在内的所有变量都是“en_US.UTF-8”。另外,我已经运行sudo locale-gen en_US en_US.UTF-8sudo dpkg-reconfigure locales. 有谁知道为什么 LC_CTYPE 似乎回落到 en_US 而不是 en_US.UTF-8 ?

标签: postgresqllocale

解决方案


集群的默认区域设置由initdb

使用 . 创建数据库集群时,会自动初始化语言环境支持initdbinitdb默认情况下,将使用其执行环境的语言环境设置初始化数据库集群 [...] 如果您想使用不同的语言环境(或者您不确定系统设置为哪个语言环境),您可以initdb准确指示要使用哪个语言环境通过指定--locale选项使用。

您可以使用createdb --locale.

如果您确实需要修改现有集群的默认值,您可以删除并template1使用不同的语言环境重新创建(参见此示例)。


推荐阅读