目前最新版postgresql是15beta4,正式版最新是14
pg确实好用,多年未动,最近整理服务器时pgadmin弹窗才发现最新的客户端不适配了都,于是就想着升级一下,9.4看上去像是上个时代的产物了。
须知
- 数据库升级跟库升级一样,是一件痛苦的事,好在postgresql有提供pg_upgrade,它要求逐个版本升级
- 版本9时遵循A.B.C版本号,也就是9.6.1-n无需升级可以直接用,版本10开始10.x无需升级可以直接用。所以我的9.4需要先升级到9.6才可以继续大版本升级
- pg升级的方式都是面向集群的,所以如果不用docker要开两个实例很麻烦,备份同理,幸运的是有好心人把升级都打包好了tianon/postgres-upgrade
升级步骤
下文中的9.4是我的版本号,如果你的是9.x请替换
cd 你的pg目录,就是data文件夹
mkdir -p ./9.4
mv ./data ./9.4/
# 最好先zip备份下数据
zip -r 9.4.zip 9.4
mkdir -p ./9.6/data
mkdir -p ./14/data
# 目录准备完毕,开始升级
#先升级到9.6
docker run --rm \
-v $PWD:/var/lib/postgresql \
tianon/postgres-upgrade:9.4-to-9.6 \
--link
# 再升级到14
docker run --rm \
-v $PWD:/var/lib/postgresql \
tianon/postgres-upgrade:9.6-to-14 \
--link
最谨慎的升级版本(建议大系统采用)
$ mkdir -p postgres-upgrade-testing
$ cd postgres-upgrade-testing
$ OLD='9.4'
$ NEW='9.5'
$ docker pull "postgres:$OLD"
$ docker run -dit \
--name postgres-upgrade-testing \
-v "$PWD/$OLD/data":/var/lib/postgresql/data \
"postgres:$OLD"
$ sleep 5
$ docker logs --tail 100 postgres-upgrade-testing
$ # let's get some testing data in there
$ docker exec -it \
-u postgres \
postgres-upgrade-testing \
pgbench -i -s 10
$ docker stop postgres-upgrade-testing
$ docker rm postgres-upgrade-testing
$ docker run --rm \
-v "$PWD":/var/lib/postgresql \
"tianon/postgres-upgrade:$OLD-to-$NEW" \
--link
$ docker pull "postgres:$NEW"
$ docker run -dit \
--name postgres-upgrade-testing \
-v "$PWD/$NEW/data":/var/lib/postgresql/data \
"postgres:$NEW"
$ sleep 5
$ docker logs --tail 100 postgres-upgrade-testing
$ # can now safely remove "$OLD"
$ sudo rm -rf "$OLD"