pg_upgrade官网介绍:https://www.postgresql.org/docs/10/pgupgrade.html

1.查看老版本数据库编译参数值并记录

select name,setting,unit from pg_catalog.pg_settings where context='internal'

或者在postgres用户下执行如下命令

$ pg_config

重点关注一下四个参数,block_size,segment_size,wal_block_size,wal_segment_size

2.上传新版本PG源码并安装(本例使用PG12演示)

# tar vxf postgresql-12beta1.tar.gz
# cd postgresql-12beta1
# ./configure --prefix=/usr/local/pgsql-12.0 --with-wal-blocksize=8 --with-segsize=1 --with-blocksize=8
# make -j 10
# make install
# export PATH=$PATH:/usr/local/pgsql-12.0/bin
# cd contrib
# make all
# make install

注意,在编译的时候,一定要保证参数的值和旧版本数据库的值相同,否则后续无法升级

3.初始化新版本数据库

新版本数据库和旧版本数据库的PGDATA必须在同一个文件系统(目录)内才可以使用--link(硬链接)

$ cd /usr/local/pgsql-12.0/bin/
$ ./initdb --wal-segsize=16 -D /pgdata01/data/

pg12中编译时没有wal_segment_size参数,可以在初始化时指定

4.检查是否可以升级

$ cd /tmp
$ mkdir upgrade_log
$ cd upgrade_log
# 使用link硬链接方式的检查
$ /usr/local/pgsql-12.0/bin/pg_upgrade -c -- link -b /postgresql/pgsql/database/bin -B /usr/local/pgsql-12.0/bin -d /postgresql/pgsql/body/etc -D /pgdata01/data
# 使用copy方式的检查
$ /usr/local/pgsql-12.0/bin/pg_upgrade -c -b /postgresql/pgsql/database/bin -B /usr/local/pgsql-12.0/bin -d /postgresql/pgsql/body/etc -D /pgdata01/data

5.检查失败,解决失败问题,检查成功,可以跳过本步骤

本例检查失败,因为旧版本数据库安装了一个插件

可以卸载插件或者在新版本数据库上面安装插件

卸载插件:

psql
drop extension pg_proctab;
\c db01
drop extension pg_proctab;
\c db02
drop extension pg_proctab;
\c db03
drop extension pg_proctab;

因为postgres,db01,db02,db03,db04数据库都安装有插件,因此都卸载掉

新版本数据库安装插件

上傳插件
# unzip pg_proctab-0.0.7.zip
# cd pg_proctab-0.0.7
# export PATH=$PATH:/usr/local/pgsql-12.0/bin/
# make
# make install

安装完毕后,再次检查,看是否通过

其他异常请根据检查提示解决

6.开始升级

关闭旧版本数据库

升级有一下两种方式:

copy方式升级

$ /usr/local/pgsql-12.0/bin/pg_upgrade -b /postgresql/pgsql/database/bin -B /usr/local/pgsql-12.0/bin -d /postgresql/pgsql/body/etc -D /pgdata01/data

优点:

copy方式是在旧版本数据库表空间同目录下新建一个新版本数据库的目录并将数据文件复制过来,因此在数据库升级后,如果新旧版本数据库的端口号不一样的话,可以同时开启

缺点:

对于大数据量数据库需要的升级时间较长,且旧版本数据库数据文件所在目录剩余容量至少和现有使用量相同,占据空间

link方式升级

$ /usr/local/pgsql-12.0/bin/pg_upgrade --link -b /postgresql/pgsql/database/bin -B /usr/local/pgsql-12.0/bin -d /postgresql/pgsql/body/etc -D /pgdata01/data

优点:

link方式是在旧版本数据库表空间目录下新建一个目录,并在里面新建一个硬链接直接指向旧版本数据库的数据文件,升级迅速且不占用空间

缺点:

因为旧版本数据库和新版本数据库由于硬链接,因此使用的实际是同一个文件,因此无法同时开启新旧版本数据库

查看是否是硬链接可以进入新版本数据库数据文件所在目录执行ll命令

$ cd /data/tbs/PG_10_201707211/16384
$ ll

结果:

-rw-------. 2 postgres postgres 32768 Jun 26 09:09 16391
-rw-------. 2 postgres postgres 0 Jun 26 09:01 16394
从结果里面可以看到,每一个数据文件2个目录指向它,硬链接

7.修改环境变量

# su - postgres
$ vi .bash_profile export PGHOME=/usr/local/pgsql
export PGDATA=/pgdata01/data
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgsql/lib
export PATH=$PATH:$PGHOME/bin

8.修改postgresql.conf和pg_hba.conf文件

9.创建扩展

10.扫尾等

 

  

 

postgresql数据库升级的更多相关文章

  1. PostgreSQL 数据库升级

    PostgreSQL软件版本升级后,需要使用pg_upgrade迁移旧版本的数据库,具体的操作参数可以参考官方文档,在此记录一下操作过程中出现的细节问题: 新版本软件在initdb的时候要保证loca ...

  2. postgresql数据库的数据导出

    一.pg_dump的用法:数据库的导入导出是最常用的功能之一,每种数据库都提供有这方面的工具,例如Oracle的exp/imp,Informix的dbexp/dbimp,MySQL的mysqldump ...

  3. 关于PDF.NET开发框架对Mysql Sqlite PostgreSQL数据库分页支持的个人看法

    关于PDF.NET开发框架的名字由来  在设计www.pwmis.com站点的时候,考虑到架构的兼容性和将来升级的可能性,最重要的是没有足够的时间去为网站添加和维护很多复杂的程序,所以在借鉴前人成功经 ...

  4. MetaSploit攻击实例讲解------终端下PostgreSQL数据库的使用(包括kali linux 2016.2(rolling) 和 BT5)

    不多说,直接上干货! 配置msf连接postgresql数据库 我这里是使用kali linux 2016.2(rolling)   用过的博友们都知道,已经预安装好了PostgreSQL. 1. p ...

  5. PostgreSQL数据库安装

    PostgreSQL数据库安装 postgresqllinux9.6.0 2018年01月31日 10时53分13秒 编译以及安装 源码编译 程序安装 数据库的启动和停止 启动数据库 关闭数据库 数据 ...

  6. PostgreSQL 数据库备份与还原

    PostgreSQL 数据库备份与还原 目录 备份 还原 栗子 备份 PostgreSQL提供的一个工具pg_dump,逻辑导出数据,生成sql文件或其他格式文件,pg_dump是一个客户端工具,可以 ...

  7. ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

    前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...

  8. Oracle数据库升级(10.2.0.4->11.2.0.4)

    环境: RHEL5.4 + Oracle 10.2.0.4 目的: 在本机将数据库升级到11.2.0.4 之前总结的Oracle数据库异机升级:http://www.cnblogs.com/jyzha ...

  9. PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库

    最近准备下PostgreSQL数据库开发的相关知识,本文把总结的PPT内容通过博客记录分享,本随笔的主要内容是介绍PostgreSQL数据库的基础信息,以及如何在我们的开发框架中使用PostgreSQ ...

随机推荐

  1. python 安装相关

    一.安装python 1.官网下载python 1.1 可下载绿色版 2.2 也可下载安装版,安装时可自动安装pip 和 自动配置环境变量 2.手动配置环境变量,我的电脑>属性>高级> ...

  2. js上 二.JavaScript基本语法

    1.JavaScript词法结构 所谓词法结构是指一套基础性规则,用来描述如何使用这门语言来编写程序,包括如下几项: ü 字符集unicode ü 区分大小写 (true和TRUE) ü 忽略空白字符 ...

  3. vue第十一单元(内置组件)

    第十一单元(内置组件) #课程目标 熟练掌握component组件的用法 熟练使用keep-alive组件 #知识点 #1.component组件 component是vue的一个内置组件,作用是:配 ...

  4. numpy的好处

    python是很慢的,因为python在执行代码的时候会执行很多复杂的check功能,比如 b=1; a=b/0.5 这个运算看起来很简单,但是在计算机的内部.b要先从一个整数integer转化成一个 ...

  5. pandas的学习8-pandas-plot出图

    import pandas as pd import numpy as np import matplotlib.pyplot as plt ''' 这次我们讲如何将数据可视化. 首先import我们 ...

  6. 程序综合设计实践 :QT实现计算器

    程序综合设计实践 :用QT实现简易计算器及贷款计算 1,项目概述 该项目目标是设计开发一个支持连续计算的包括括号( ),求余%四则运算+ - * /的计算器 Calculator 以及贷款计算功能 M ...

  7. mysql锁机制 读书笔记

    目录 MySQL锁机制 1.什么是锁 2.lock与latch 3.InnoDB存储引擎中的锁 3.1锁的类型 3.2 一致性非锁定读 3.3 一致性锁定读 4 锁的算法 4.1行锁的3中算法 4.2 ...

  8. Python进行拉勾网数据爬取框架与思路

    爬取内容 用交互式的方式输入想查询的职位并循环输出职位简要信息,为了方便阅读,本文使用到的变量并不是以目标变量的英文来命名,而是为了方便而取的变量名,各位大牛请谅解.(因贵网站爬取一定量数据后需要登陆 ...

  9. 纯Python绘制艺术感满满的山脊地图,创意满分

    1 简介 下面的这幅图是英国摇滚乐队 Joy Division 在1979年发行的其第一张录音室专辑 Unknown Pleasures 的封面,由艺术家 Peter Saville 基于射电脉冲星信 ...

  10. Excel-VLOOKUP函数组合应用④

    问题场景 查找匹配并返回多列数据,例如:将某个部门所涉及的相关列的数据从[全员数据源]中整理出来,并按照一定顺序,然后发送给各部门的负责人. 场景 从[全员数据源]中共23列数据,整理出[测试部门人员 ...