You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 18.04 Beta2下PostgreSQL 10创建数据库locale报错咨询

问题原因与解决办法

这问题我之前在Ubuntu环境部署PostgreSQL时也踩过坑,本质就是PostgreSQL对locale名称的大小写严格敏感,而Ubuntu系统的locale命名规则和你脚本里的写法不匹配导致的。

为什么会报错?

Ubuntu 18.04系统里,通过locale -a命令可以看到,系统预装的locale名称是小写后缀的en_US.utf-8,但你的脚本里写的是en_US.UTF-8(UTF-8是大写)。PostgreSQL在查找对应locale时会严格匹配大小写,找不到大写版本的locale就抛出了ERROR: invalid locale name: "en_US.utf-8"的错误。

至于PostgreSQL 9.5能正常运行,大概率是因为当时的系统环境中locale名称是大写格式,或者旧版本的PostgreSQL对locale名称的大小写限制没那么严格,换了新系统+新版本PG后就触发了这个问题。

解决办法

有几种可行的方案,你可以根据需求选择:

  • 修改脚本中的locale参数:把LC_COLLATE和LC_CTYPE的值改成和系统一致的小写格式,修改后的脚本如下:

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

    这是最直接的解决方式,能保证你明确指定的locale生效。

  • 移除LC参数(你已经发现的方法):如果不需要强制指定特定locale,直接删掉LC_COLLATE和LC_CTYPE参数,PostgreSQL会自动继承系统的默认locale(也就是en_US.utf-8),这样脚本也能正常执行。

  • (不推荐)生成对应大写的locale:可以通过sudo locale-gen en_US.UTF-8命令在系统中生成大写版本的locale,不过这种方法没必要,反而会增加系统locale的冗余,不如直接对齐系统默认的命名规范。

内容的提问来源于stack exchange,提问作者Nathan Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:28:09