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也已自启动成功。

相关推荐
csudata28 分钟前
绿色便携版PostgreSQL发行版重磅发布
数据库·postgresql
嵌入式郑工8 小时前
RK3566 LubanCat 开发板 USB Gadget 配置完整复盘
linux·驱动开发·ubuntu
一条闲鱼_mytube11 小时前
MySQL vs PostgreSQL 对比
数据库·mysql·postgresql
l1t11 小时前
DeekSeek辅助总结PostgreSQL Mistakes and How to Avoid Them 的一个例子
数据库·postgresql
数据知道12 小时前
PostgreSQL核心原理:为什么数据库偶尔会卡顿?
数据库·postgresql
l1t13 小时前
DeepSeek辅助总结postgresql wiki提供的数独求解器
数据库·sql·postgresql
Moshow郑锴13 小时前
Spark在银行系统ETL中的实战应用:TXT文件到PostgreSQL的余额处理全流程
postgresql·spark·etl
好奇的菜鸟13 小时前
Ubuntu 18.04 启用root账户图形界面登录指南
数据库·ubuntu·postgresql
zbguolei14 小时前
虚拟机安装Ubuntu后无法登录
linux·运维·ubuntu
叠叠乐14 小时前
移动家庭云电脑永不关机实验版本
ubuntu