PostgreSQL 利用pg_upgrade升级版本

  参考:http://www.postgresql.org/docs/current/static/pgupgrade.html

  • 概述

从低版本升级到 新版本,有几种可选的方案。一是使用pg_dump/pg_restore,该方法比较耗时,也即是停机时间比较长,特别是大数据量下,但是 稳定且易于操作。二是和MySQL那样利用复制的方式,停机时间短,但操作相对复杂。第三种就是利用pg_upgrade,重建系统表,相对停机时间较短。

  • 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

 

posted @ 2016-01-16 21:59  cxy486  阅读(1456)  评论(0编辑  收藏  举报