ubuntu22+postgresql18启动报错

ubuntu22+postgresql18启动报错

现象:首次安装postgresql18,可以正常启动和使用,也创建了数据库,一切都很好。但是服务器重启后postgresql无法自启动(已设置了systemctl enable postgresql)。

查看报错日志

bash 复制代码
> sudo tail -200f /var/log/postgresql/postgresql-18-main.log
# 错误日志如下
2025-10-23 14:52:25.643 CST [2178] LOG:  invalid value for parameter "lc_messages": "en_US.UTF-8"
2025-10-23 14:52:25.643 CST [2178] LOG:  invalid value for parameter "lc_monetary": "en_US.UTF-8"
2025-10-23 14:52:25.643 CST [2178] LOG:  invalid value for parameter "lc_numeric": "en_US.UTF-8"
2025-10-23 14:52:25.643 CST [2178] LOG:  invalid value for parameter "lc_time": "en_US.UTF-8"
2025-10-23 14:52:25.643 CST [2178] FATAL:  configuration file "/etc/postgresql/18/main/postgresql.conf" contains errors

查看系统locale

经过分析,应该是区域设置不匹配导致的。为什么第一次安装能正常使用,猜测可能是安装postgresql时临时修改了系统时区/区域为en_US.UTF-8,系统重启后又恢复默认了,没有深入考证,继续解决问题。

bash 复制代码
> sudo locale
# 内容如下
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=

解决:修改区域设置

bash 复制代码
# 查看当前系统是否支持en_US.UTF-8
> locale -a
# 输出如下,发现不支持
C
C.utf8
POSIX
# 需要先生成en_US.UTF-8
> sudo locale-gen en_US.UTF-8
# 可能会报错,以下是报错信息,报错时是无法生成成功的
Generating locales (this might take a while)...
  en_US.UTF-8...bad magic value in archive header
 done
# 执行命令强制重新生成
> sudo locale-gen --purge
# 下面是成功信息
Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.
# 验证一下
> sudo locale -a
# 安装成功
C
C.utf8
POSIX
en_US.utf8
# 使用update-locale设置区域
> sudo update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8

重启服务器,查看设置结果

bash 复制代码
> sudo locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

至此,设置成功,postgresql也已自启动成功。

相关推荐
雷工笔记3 小时前
Ubuntu迁移记录
笔记·ubuntu
一叶龙洲5 小时前
ubuntu26.04 xfce美化成mac
服务器·ubuntu·macos
一叶龙洲17 小时前
wslg打开Ubuntu24.04默认打开图形界面
linux·服务器·数据库·ubuntu
敖行客 Allthinker19 小时前
Parallels Ubuntu虚拟机项目如何让手机访问?完整解决方案
linux·运维·ubuntu
keyipatience20 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
观山岳五楼21 小时前
Ubuntu 24 怎么使用Ubuntu 20 的镜像源
linux·运维·ubuntu
辰痕~1 天前
物理机装Linux操作系统(Ubuntu为例)
linux·ubuntu
jnrjian1 天前
\dx Postgres 查看EXTENSION
postgresql
Lihua奏1 天前
高可用与扩展:一台 PostgreSQL 不够用之后怎么办?
postgresql
Byron Loong1 天前
【Git】如何检查 Ubuntu 系统上 gitLab 是否开启
git·ubuntu·gitlab