PostgreSQL版本快速升级

写在前面

  PostgreSQL9.5版本支持数据分片的功能,为以后做分布式考虑,准备将生产环境的9.1版本升级至9.5。中间需要做数据迁移。

  在迁移操作中,为保证数据完整性,一般需要在数据库停止的情况下进行备份恢复操作,在数据量小的情况下,通过pg_dumpall的方式备份恢复也是很迅速的,但如果数据量大的情况,再使用这种方式将会耗去大量的时间,特别在生产环境中,长时间的停止使用数据库是非常致命的。

  PostgreSQL提供了pg_upgrade的命令用于数据库版本的升级,使用link模式可以快速对数据进行迁移操作。

操作步骤:

  1、安装新版本数据库

    /PATH/TO/postgresql-9.5.1-1-linux-x64.run,根据提示进行数据库安装操作。

  2、停止旧版本的数据库

    /etc/init.d/postgresql-9.1 stop ,根据实际情况停止数据库运行

  3、检查旧数据的区域支持格式

    区域支持在初始化数据库时被指定,不可更改,因此需要将新的数据库的区域支持更改成与旧数据库一样,否则pg_upgrade操作会报错。

    a、查看旧数据库的区域支持,主要是lc-collate,lc-ctype两个参数,进入数据库,使用\l,可以查看

    b、使用initdb指定区域支持初始化新的数据库。

   /PATH/TO/9.5/bin/initdb --lc-collate=zh_CN.utf8 --lc-ctype=zh_CN.utf8 --lc-messages=zh_CN.utf8 --lc-monetary=zh_CN.utf8 --lc-numeric=zh_CN.utf8 --lc-time=zh_CN.utf8 -D /PATH/newdata/

  4、通过link mode 进行快速的数据库升级,要使用link模式需确保新旧数据目录在同一个文件系统底下

    先介绍下pg_upgrade的几个常用参数:使用pg_upgrade --help可以查看详细参数配置

    -d, --old-datadir=DATADIR      指定旧数据文件所在目录

    -D, --new-datadir=DATADIR    指定新数据文件所在目录

    -b, --old-bindir=BINDIR           指定旧版本可执行命令目录

    -B, --new-bindir=BINDIR         指定新版本可执行命令目录

    -k, --link                                使用link模式进行更新(即使用硬链接的方式将新数据文件指向旧数据文件的真实存放位置,减去了copy的时间)

    /PATH/TO/9.5/bin/pg_upgrade -d /PATH/TO/olddata -D /PATH/TO/newdata -b /PATH/TO/9.1/bin -B /PATH/TO/9.5/bin --link

    若没报错,则完成。

  5、启动新数据库

    

参考:

http://www.postgresql.org/docs/9.5/static/pgupgrade.html

PostgreSQL版本快速升级的更多相关文章

  1. postgresql利用pg_upgrade升级数据库(从8.4升级到9.5)

    其他见:http://my.oschina.net/ensn/blog/636766 本文利用pg_upgrade实现将8.4.18版本升级到9.5.0版本,8.4.18版本为RedHat系统自带pg ...

  2. SequoiaDB版本在线升级介绍说明

    1.前言 在SequoiaDB数据库发展过程中,基本保持每半年对外发行一个正式的Release版本.并且每个新发布的Release版本相对老版本而言,性能方面都有很大的提高,并且数据库也会在新版本中加 ...

  3. Gerrit代码审计系统实战-Gerrit 2.15.14版本快速搭建

    Gerrit代码审计系统实战-Gerrit 2.15.14版本快速搭建  作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Gerrit版本选择 1>.查看Gerrit官网 ...

  4. mac平台多个php版本快速切换

    mac平台多个php版本快速切换 要求所有php版本都是由brew安装 使用brew安装php多版本方法 # brew install php56 # brew install php70 安装切换工 ...

  5. postgresql异常快速定位

    今天下午在使用.NET链接postgresql的时候报了“3D000”的错误,经过测试得知原来是web.config中的数据库配置问题. 在这里有个小情况需要注意,postgresql是不允许创建相同 ...

  6. 如何快速的将Centos6.7快速升级3.10.9

    参考文档:http://www.xiexianbin.cn/linux/2015/10/15/quickly-upgrade-centos6.5-kernel-from-2.6.32-to-3.10. ...

  7. Nginx1.8.0版本平滑升级新版本1.9.7

    原文:http://www.jb51.net/article/79878.htm 首先查看现在环境nginx的版本为1.8.0 编译的参数只指定了安装路径: 复制代码代码如下: [root@local ...

  8. c/s程序版本自动升级的问题,如何判断client端版本号是否最新,然后从指定ftp服务器down

    c/s程序版本自动升级的问题,如何判断client端版本号是否最新,然后从指定ftp服务器down http://blog.csdn.net/delphizhou/article/details/30 ...

  9. asp.net 版本一键升级,后台直接调用升级脚本

    应客户需求,要求实现一个版本一键升级的功能,咨询过同事之后弄了个demo出来,后台代码如下: //DBConnModelInfo:连接字符串的对象 (包含数据库实例名,数据库名,登陆名,登陆密码) p ...

随机推荐

  1. Zabbix实战-简易教程(3)--DB安装和表分区

    一.DB安装环境 主机角色 主机IP VIP 操作系统版本 软件版本 DB Master A 192.168.1.97 (主从) CentOS 6.5 64bit mysql-5.6.21 DB Sl ...

  2. 基础Linux命令总结

    简单命令Linux ls 列出当前文件目录下的文件(只显示文件名) pwd 显示当前操作的路径 cd 跳转路径 ls -a 可以把隐藏的文件显示出来 ,另外,创建隐藏文件的命令是 touch.123. ...

  3. CSS3中结构伪类选择器——root、not、empty、target选择器

    1.root选择器 将样式绑定到页面的根元素中.根元素是指位于文档树中最顶层结构的元素,在HTML页面中就是指包含整个页面的<html>部分. <style type="t ...

  4. Codeforces Beta Round #2 A,B,C

    A. Winner time limit per test:1 second memory limit per test:64 megabytes input:standard input outpu ...

  5. [51nod1329]路径游戏

    Snuke与Sothe两个人在玩一个游戏.游戏在一个2*N的网格中进行(2行N列),这个网格中的2N个格子不是黑色就是白色.定义,一条有效路径是指一个完全由白色格子构成的序列,这个序列的第一个网格元素 ...

  6. HDU--1212大数取模

    大数取模问题.题目传送门:HDU1212 #include <iostream> using namespace std; char a[1010]; int main() { int b ...

  7. 关于WPF添加右击ContextMeun,以及获取所绑定控件的源

    今天在公司给公司做一个门禁软件,其中有一个添加员工的功能,功能已经做好,但是页面的右边是一个treeView控件,于是我想到再添加员工后,可以在treeview上的部门的TreeViewWithIco ...

  8. HTML 和 PHP 、MySQL 的交互

    为什么要用到数据库? World Wide Web (WWW)不仅仅是一个提供信息的地方.如果你有什么东西,作一个网站,同样可以和全世界的人一起分享.但是,这并不是一件很容易的事.当网站越做越大时,你 ...

  9. php(ThinkPHP)实现微信小程序的登录过程

    源码也在我的github中给出 https://github.com/wulongtao/think-wxminihelper 下面结合thinkPHP框架来实现以下微信小程序的登录流程,这些流程是结 ...

  10. DOS基本命令(基本部分)

    一.cls(clear screen的简写) 命令作用:清屏屏幕 详细介绍:屏幕显示的所有字符信息都是存放在一个屏幕缓冲区中,cls命令的作用是清除屏幕上的文字,并将该缓冲区清空. 二.dir(dir ...