在Debian 11上使用pg_upgrade升级PostgreSQL 11至15失败求助
解决Debian 11环境下PostgreSQL 11升级至15的pg_upgrade依赖问题
环境:Bitnami Helm Chart,Debian 11(bullseye),需从PostgreSQL 11升级至15
错误:执行pg_upgrade时旧PG11二进制文件缺失libicui18n.so.63依赖,该库仅存在于Debian 10(buster)中,Debian 11默认不提供
方案一:手动安装Debian 10的libicu63包
- 下载对应架构的libicu63包(以amd64为例):
wget http://deb.debian.org/debian/pool/main/i/icu/libicu63_63.1-6+deb10u3_amd64.deb - 安装包,若出现依赖问题,临时添加Debian 10源补全依赖:
- 编辑
/etc/apt/sources.list,添加一行:deb http://deb.debian.org/debian buster main - 更新源并修复依赖:
apt update && apt install -f - 安装libicu63:
dpkg -i libicu63_63.1-6+deb10u3_amd64.deb - 安装完成后,注释掉刚添加的buster源,再次执行
apt update避免后续源冲突
- 编辑
- 重新执行原pg_upgrade命令:
gosu postgres pg_upgrade -c -b /bitnami/postgresql/oldbin -B /opt/bitnami/postgresql/bin -d /bitnami/postgresql/olddata -D /bitnami/postgresql/data
方案二:临时指定LD_LIBRARY_PATH加载旧依赖库
如果Bitnami的旧PostgreSQL 11安装目录自带了依赖库(部分打包会包含):
- 查找旧libicu63的位置:
find /bitnami/postgresql/ -name "libicui18n.so.63" - 找到路径后,临时设置环境变量执行pg_upgrade(替换
/path/to/old/lib为实际路径):LD_LIBRARY_PATH=/path/to/old/lib gosu postgres pg_upgrade -c -b /bitnami/postgresql/oldbin -B /opt/bitnami/postgresql/bin -d /bitnami/postgresql/olddata -D /bitnami/postgresql/data
方案三:用Debian 10容器执行pg_upgrade
利用容器隔离环境,在Debian 10环境中运行升级命令:
- 启动Debian 10容器,挂载PostgreSQL的旧bin、新bin、旧数据、新数据目录:
docker run -it --rm \ -v /bitnami/postgresql/oldbin:/oldbin \ -v /opt/bitnami/postgresql/bin:/newbin \ -v /bitnami/postgresql/olddata:/olddata \ -v /bitnami/postgresql/data:/newdata \ debian:buster - 在容器内安装PostgreSQL 11依赖:
apt update && apt install postgresql-11 - 切换到postgres用户执行升级:
su postgres pg_upgrade -c -b /oldbin -B /newbin -d /olddata -D /newdata - 升级完成后退出容器,回到主机检查新数据目录权限,启动PostgreSQL 15服务
方案四:使用Bitnami PostgreSQL 11镜像执行升级
针对Bitnami环境,直接用官方PG11镜像运行升级:
- 启动Bitnami PG11容器,挂载相关目录:
docker run -it --rm \ -v /bitnami/postgresql/oldbin:/bitnami/postgresql/oldbin \ -v /opt/bitnami/postgresql/bin:/opt/bitnami/postgresql/bin \ -v /bitnami/postgresql/olddata:/bitnami/postgresql/olddata \ -v /bitnami/postgresql/data:/bitnami/postgresql/data \ bitnami/postgresql:11 - 在容器内执行原升级命令:
gosu postgres pg_upgrade -c -b /bitnami/postgresql/oldbin -B /opt/bitnami/postgresql/bin -d /bitnami/postgresql/olddata -D /bitnami/postgresql/data - 完成后退出容器,后续检查权限并启动新PG服务
内容的提问来源于stack exchange,提问作者beatrice
相关产品推荐
相关产品推荐

