之前安装的是13.11,测试将版本升级到15
#建个存放东西的目录先
mkdir -p /pgupdate/{'new_data','old_bin','old_data','old_lib','old_share'}
cd /pgupdate
#run一个15的容器把data目录弄出来
docker run -d --name pg15 -e POSTGRES_PASSWORD=123456 postgres:latest
#将13.11容器中的data,bin这些拉出来
docker cp pg13:/usr/share/postgresql/13/ old_share/
docker cp pg13:/usr/lib/postgresql/13/lib/ old_lib/
docker cp pg13:/var/lib/postgresql/data old_data/
docker cp pg13:/usr/lib/postgresql/13/bin/ old_bin/
docker cp pg15:/var/lib/postgresql/data new_data/
#生成一个临时的15版本容器升级数据
docker run -it --name newtemp \
-v $(pwd)/old_bin/bin:/usr/lib/postgresql/13/bin \
-v $(pwd)/old_share/13:/usr/share/postgresql/13 \
-v $(pwd)/new_data/data:/data/new_data \
-v $(pwd)/old_data/data:/data/old_data \
-v $(pwd)/old_lib/lib:/usr/lib/postgresql/13/lib
-e PGDATA:/data/new_data \
--privileged=true postgres:latest /bin/bash
#设置用户和权限
chmod -R 0700 /data/
chown -Rf postgres:postgres /data
#登录postgres用户,升级数据
su - postgres
/usr/lib/postgresql/15/bin/pg_upgrade -b /usr/lib/postgresql/13/bin/ -B /usr/lib/postgresql/15/bin/ -d /data/old_data/ -D /data/new_data/ -c
/usr/lib/postgresql/15/bin/pg_upgrade -b /usr/lib/postgresql/13/bin/ -B /usr/lib/postgresql/15/bin/ -d /data/old_data/ -D /data/new_data/
#ok至此,数据已经处理完毕,退出容器,新数据在new_data下,开新容器挂载即可