PostgreSQL大版本升级

0、说明
本次实验从pg10升级到pg11

1、源码安装,编译新版本

itm_pg@oracle-> cd postgresql-11.1
–使用新的数据目录
itm_pg@oracle-> ./configure --prefix=/home/itm_pg/pgsql11.1 --with-perl --with-python
itm_pg@oracle->make world -j 8
itm_pg@oracle->make install-world

2、初始化新的数据库集簇
itm_pg@oracle-> /home/itm_pg/pgsql11.1/bin/initdb -D /home/itm_pg/pgsql11.1/pgdata -E UTF8 --locale=C -U postgres
—这里initdb一定要写成绝对路径!否则会使用原先版本的initdb去初始数据看

3、安装自定义的共享对象文件
把旧集簇使用的所有自定义共享对象文件(或者 DLL)安装到新集簇中, 例 如pgcrypto.so,不管它们是来自于 contrib还是某些其他源码。不要安装模式定义 (例 如CREATE EXTENSION pgcrypto),因为这些将会从旧集簇升级得到。 还有,任何自 定义的全文搜索文件(词典、同义词、辞典、停用词)也必须 被复制到新集簇中。若原先数据库中没安装插件可忽略。

4、停旧版本数据库,修改新库认证文件
itm_pg@oracle-> pg_ctl stop
—若新库没有启动,可不用停
itm_pg@oracle-> vi pg_hba.conf
host all all 127.0.0.1/32 trust
—因为升级需要多次连接新老集群数据库实例, 所以修改为使用本地trust认证.
5、检验更新

itm_pg@oracle-> cd /home/itm_pg/pgsql11.1/bin
itm_pg@oracle-> /home/itm_pg/pgsql11.1/bin/pg_upgrade -c -b /home/itm_pg/pgsql10.3/bin/ -B /home/itm_pg/pgsql11.1/bin/ -d /home/itm_pg/pgdata/ -D /home/itm_pg/pgsql11.1/pgdata/ -U postgres
Performing Consistency Checks
-----------------------------
Checking cluster versions                                   ok
Checking database user is the install user                  ok
Checking database connection settings                       ok
Checking for prepared transactions                          ok
Checking for reg* data types in user tables                 ok
Checking for contrib/isn with bigint-passing mismatch       ok
Checking for presence of required libraries                 ok
Checking database user is the install user                  ok
Checking for prepared transactions                          ok

*Clusters are compatible*

出现该提示表示可以进行更新,这里列出一些此处会出现的一些问题。
问题一:
Performing Consistency Checks

Checking cluster versions
New cluster data and binary directories are from different major versions.
Failure, exiting
这里出现这种提示是因为没有指定运行新库版本的pg_upgrade,要写成绝对路径。
问题二:
This utility can only upgrade to PostgreSQL version 11.1
这是因为数据库集簇初始化的时候没有指定新版本的initdb导致的,需要写成绝对路径。
6、更新

itm_pg@oracle-> /home/itm_pg/pgsql11.1/bin/pg_upgrade  -b /home/itm_pg/pgsql10.3/bin/ -B /home/itm_pg/pgsql11.1/bin/ -d /home/itm_pg/pgdata/ -D /home/itm_pg/pgsql11.1/pgdata/ -
U postgres

Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
    ./analyze_new_cluster.sh

Running this script will delete the old cluster's data files:
    ./delete_old_cluster.sh

``
出现上述提示表示更新成功,升级过程是拷贝原来目录的数据到新版本指定的目录中,最后提示生成两个脚本,一个是analyze_new_cluster.sh,需要在新版本中执行,用来收集统计信息,另一个是 delete_old_cluster.sh,用来删除旧版本集群数据,当然为了安全起见可以等系统运行几天没问题再来删除。

7、启动新库
修改新库配置文件,前面修改的认证文件也可以根据需要修改回来。
更新环境变量(更新PGDATA和 PGHOME即可),然后启动新库:l

itm_pg@oracle-> pg_ctl start
waiting for server to start....2019-01-30 00:47:33.037 CST [8736] LOG:  listening on IPv6 address "::1", port 1921
2019-01-30 00:47:33.037 CST [8736] LOG:  listening on IPv4 address "127.0.0.1", port 1921
2019-01-30 00:47:33.038 CST [8736] LOG:  listening on Unix socket "/tmp/.s.PGSQL.1921"
2019-01-30 00:47:33.046 CST [8737] LOG:  database system was shut down at 2019-01-30 00:46:54 CST
2019-01-30 00:47:33.047 CST [8736] LOG:  database system is ready to accept connections
 done
server started
itm_pg@oracle-> ./delete_old_cluster.sh
itm_pg@oracle-> psql
psql (11.1)
Type "help" for help.

postgres=# /d
        List of relations
 Schema | Name | Type  |  Owner   
--------+------+-------+----------
 public | t    | table | postgres
(1 row)

8、后续处理
更新统计信息:
由于pg_upgrade并未传输优化器统计信息,在升级的尾声 你将被指示运行一个命令来生
成这些信息。你可能需要设置连接参数来匹配你 的新集簇。
删除旧数据库集簇:
一旦你对升级表示满意,你就可以通过运行 pg_upgrade完成时提到的脚本来删除旧集簇 的 数据目录(如果在旧数据目录中有用户定义的表空间就不可能实现自动删除)。 你 也可以删除旧安装目录(例如bin、share)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值