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

相关推荐
秉承初心16 小时前
PostgreSQL 数据性能瓶颈突破实战
数据库·postgresql·oracle
张飞飞飞飞飞17 小时前
Tmux命令使用教程
linux·服务器·ubuntu
IvorySQL20 小时前
PostgreSQL 技术日报 (6月15日)|PG19 性能优化推进,POSETTE 大会倒计时 2 天
数据库·人工智能·postgresql·开源
盼小辉丶1 天前
Ubuntu极速部署OpenClaw完全指南(本地模型+DeepSeek)
linux·ubuntu·openclaw
黑白园1 天前
【环境搭建】Ubuntu安装(一)
linux·ubuntu
Moshow郑锴1 天前
Ubuntu用SDKMAN轻松管理多个Java 版本
java·ubuntu·sdkman
error:(1 天前
Ubuntu 22.04 GNOME远程桌面配置问题排查与解决全流程
linux·运维·ubuntu
Java知识技术分享1 天前
在windows上使用wsl安装Ubuntu~linux系统
linux·人工智能·windows·ubuntu
天疆说1 天前
在 Ubuntu 24.04 上安装 MATLAB R2021b
数据库·ubuntu·matlab
Clang's Blog1 天前
Ubuntu(20.04/22.04/24.04)国内环境一键安装 Docker、JDK17 和 Maven
ubuntu·docker·maven