Confluence 升级到 9.0.3 版本后,官方通告会在后续的版本结束 PGSQL-14 的版本支持。考虑本机另外的容器启用了不同版本的数据库就想趁此机会把数据库统一为15.2
网上大部分的建议是通过 pg_upgrade 的指令完成跨版本的升级操作,主要的操作流程如下:
docker cp postgres:/usr/lib/postgresql/14 /docker/wiki/pgsql #该步骤操作就存在问题,alpine 是精简镜像,数据库相关文件存储在 /usr/loca/bin,非 alpine 版本的能正常操作 docker-compose -f docker-compose-wiki.yml down tar zcvf wiki-9.0.3-pg14-sql.tar.gz /data/wiki/pgsql # 备份数据库目录 mv /data/wiki/pgsql /data/wiki/pgsql.old docker-compose -f pgsql.yml up # 启动 15.2 数据库并生成对应的目录 docker-compose -f pgsql.yml down # 重新配置文件添加 command 指令 docker-compose -f pgsql.yml up docker exec -it wiki-pgsql bash /usr/lib/postgresql/15/bin/pg_upgrade -b /var/lib/postgresql/old/14/bin -B /usr/lib/postgresql/15/bin -d /var/lib/postgresql/old/ -D /var/lib/postgresql/data/ --check |
version: '3' services: db: image: chaitin/safeline-postgres:15.2 # image: postgres:14.2-alpine # container_name: wiki-pg restart: always command: bash tty: true environment: - 'POSTGRES_USER=confluence' - 'POSTGRES_PASSWORD=password' - 'POSTGRES_DB=confluence' - 'POSTGRES_ENCODING=UTF8' - 'POSTGRES_COLLATE=C' - 'POSTGRES_COLLATE_TYPE=C' volumes: - /data/wiki/pgsql:/var/lib/postgresql/data - /data/wiki/pgsql.old:/var/lib/postgresql/old - /etc/localtime:/etc/localtime:ro |
最后在执行升级操作时系统提示大量的 .so 链接库缺失,倒腾了多个版本的 lib 文件和目录后还提示 glibc 缺少,考虑到 alpine 版本的情况,决定换另一种升级方式。
在不更改目录和配置的情况下仅更换容器数据库的版本,将 postgres:14.2-alpine 更换为 chaitin/safeline-postgres:15.2
数据库启动会提示检测到存在记录,已有记录的版本是 pg14 和当前 15.2 版本不符,数据库无法正常启动 |
通过 pg_dumpall 导出14.2 版本数据库文件然后在 15.2 环境中再导入实现版本升级
docker-compsoe -f docker-compose-wiki.yml up docker exec postgres pg_dumpall -U confluence > dump.sql docker-compsoe -f docker-compose-wiki.yml down mv pgsql pgsql.bak docker-compose -f pgsql.yml up # 需要注释 command 指令,启动 15.2 并生成对应的文件目录 cp dump.sql /data/wiki/pgsql/ docker exec -it wiki-pgsql bash cd /var/lib/postgresql/data/ psql -U confluence < dump.sql exit |