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

PostgreSQL 15升级至16:客户端切换成功但服务器升级失败求助

PostgreSQL 15 升级至 16 故障排查方案

核心问题定位

当前pg_upgrade失败的直接原因是PostgreSQL 15 源集群无法临时启动,导致无法通过套接字连接完成一致性检查。以下是分步排查与解决步骤:

1. 手动验证 PostgreSQL 15 实例启动能力

先单独启动15版本实例,获取具体启动失败日志,这是排查的关键:

su - postgres -c "/usr/pgsql-15/bin/pg_ctl start -D /var/lib/pgsql/15/data/ -l /tmp/pg15_start.log"

查看日志文件/tmp/pg15_start.log,里面会包含pg_ctl无法启动服务器的具体原因(比如配置错误、权限问题、文件损坏等)。

2. 检查目录权限与配置

  • 数据目录权限:确保15版本数据目录权限正确,postgres用户需拥有完整读写权限:
    ls -ld /var/lib/pgsql/15/data/
    # 正常权限应为 drwx------  postgres postgres
    
  • 套接字目录配置:查看15版本postgresql.conf中的unix_socket_directories参数,确认是否包含/var/lib/pgsql(错误提示的套接字创建目录):
    grep unix_socket_directories /var/lib/pgsql/15/data/postgresql.conf
    
    若参数值不包含该目录,可临时修改为unix_socket_directories = '/var/lib/pgsql',再尝试启动实例。
  • 端口占用检查:确认错误中的50432端口未被其他进程占用:
    ss -tulpn | grep 50432
    

3. 修正pg_upgrade命令参数

确保命令中使用绝对路径,避免相对路径导致的目录识别错误:

/usr/pgsql-16/bin/pg_upgrade \
  -b /usr/pgsql-15/bin/ \
  -d /var/lib/pgsql/15/data/ \
  -B /usr/pgsql-16/bin/ \
  -D /var/lib/pgsql/16/data/

同时确认-b和-B指向的二进制目录下,pg_ctl、postgres等文件存在且可执行。

4. SELinux 与磁盘空间排查

  • SELinux 临时验证:若当前SELinux为Enforcing状态,临时关闭后重试启动:
    setenforce 0
    
    若实例能正常启动,后续需恢复SELinux并调整策略:
    restorecon -R /var/lib/pgsql/
    setenforce 1
    
  • 磁盘空间检查:确保/var/lib/pgsql所在磁盘有足够空间(至少与15版本数据目录大小相当):
    df -h /var/lib/pgsql/
    

内容的提问来源于stack exchange,提问作者paul runner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 12:44:55