PostgreSQL从低版本升级到 新版本,有几种可选的方案。一是使用pg_dump/pg_restore,该方法比较耗时,也即是停机时间比较长,特别是大数据量下,但是 稳定且易于操作。二是和MySQL那样利用复制的方式,停机时间短,但操作相对复杂。第三种就是利用pg_upgrade,重建系统表,相对停机时间较短。
1. 语法 pg_upgrade -b oldbindir -B newbindir -d olddatadir -D newdatadir [option...] 2. 原理 根据官方文档介绍,PostgreSQL 每次升级主要体现在系统表的改变,对于数据文件的格式基本不做改动,因此利用这个特性,只要重建所有系统表,复用原有数据文件,即可完成升级。对于 8.4.X后的每一次大版本升级都适用。需要注意的是,即便如此,该方法也有一定的限制,在官方文档的NOTE部分有详细说明。
1. 编辑postgresql.conf,修改旧数据库端口为5433 2. 安装新版PostgreSQL 3. 停止新旧数据库服务 sudo service postgresql stop 4. 验证兼容性 /usr/lib/postgresql/9.4/bin/pg_upgrade --old-datadir=/var/lib/postgresql/9.3/main/ --new-datadir=/var/lib/postgresql/9.4/main/ --old-bindir=/usr/lib/postgresql/9.3/bin/ --new-bindir=/usr/lib/postgresql/9.4/bin -p5433 -P5432 -o"-c config_file=/etc/postgresql/9.3/main/postgresql.conf" -O"-c config_file=/etc/postgresql/9.4/main/postgresql.conf" -c 5. 升级 /usr/lib/postgresql/9.4/bin/pg_upgrade --old-datadir=/var/lib/postgresql/9.3/main/ --new-datadir=/var/lib/postgresql/9.4/main/ --old-bindir=/usr/lib/postgresql/9.3/bin/ --new-bindir=/usr/lib/postgresql/9.4/bin -p5433 -P5432 -o"-c config_file=/etc/postgresql/9.3/main/postgresql.conf" -O"-c config_file=/etc/postgresql/9.4/main/postgresql.conf" 6. 执行脚本重建统计信息,删除旧数据库(可选) ./analyze_new_cluster.sh ./delete_old_cluster.sh (责任编辑:好模板) |