Postgresql 大小版本升级

文章结构如下:

Postgresql是一个非常活跃的社区开源项目,更新速度很快,每一次版本的更新都会积极的修复旧版本的BUG,性能上也会有不同幅度的提升。10之前的版本由三部分组成,10开始只有两部分数字组成。

 

1. 小版本升级

Postgresql每次的小版本升级不会改变内部的存储格式,也不会改变数据目录,并且总是向上兼容同一主版本,9.6.29.6.1总是兼容的。升级小版本只需要安装新的可执行文件,并且重启数据库实例。

① 备份

可以进行数据库备份pg_dump备份

② 关闭数据库服务器

pg_ctl stop -D /pgsql/pg_data/

 

cd /usr/local/

mv pgsql/ pgsqlbak

 

postgresql9.6.8 上传到目录/usr/local/src并解压

 

mkdir -p /usr/local/pgsql

cd /usr/local/src/postgresql

./configure --with-ossp-uuid --prefix=/usr/local/pgsql

 

gmake world

gmake install-world

 

 

 

③ 安装完后,直接启动数据库

pg_ctl start -D /pgsql/pg_data/

 

 

启动后,数据查询成功。

 

 

 

2. 大版本升级

大版本可以用pg_dumpall pg_upgrade进行升级,主要是将pg_upgrade升级。

pg_upgrade(以前称为pg_migrator)允许将存储在PostgreSQL数据文件中的数据升级到更高版本的PostgreSQL主版本,而不需要主要版本升级所需的数据转储/重载,例如从8.4.7升级到PostgreSQL的当前主要版本。次要版本升级不需要,例如从9.0.19.0.4

主要的PostgreSQL版本会定期添加新功能,这些功能通常会改变系统表的布局,但内部数据存储格式很少会发生变化。pg_upgrade通过创建新的系统表并简单地重用旧的用户数据文件来使用此事实来执行快速升级。如果未来的主要版本以一种使旧数据格式不可读的方式更改数据存储格式,则pg_upgrade将无法用于此类升级。(社区将试图避免这种情况。)

pg_upgrade尽力确保旧的和新的集群是二进制兼容的,例如通过检查兼容的编译时设置,包括32/64位二进制文​​件。重要的是,任何外部模块也是二进制兼容的,尽管pg_upgrade无法检查。

pg_upgrade支持从8.4.X及更高版本升级到PostgreSQL的当前主要版本。

有一些外部扩展要求在升级之前先升级旧版本的外部扩展,例如GIS

 

一.使用upgrade 普通模式升级

 

1) 安装新版的PG并初始化数据目录

把新版本的包上传到/usr/local/src目录 root 执行以下命令

mkdir -p /usr/local/pgsql10

cd /usr/local/src/

tar -zxvf postgresql-10.8.tar.gz

./configure --with-ossp-uuid --prefix=/usr/local/pgsql10

gmake world

gmake install-world

 

mkdir -p /pgsql/pg_data10

mkdir -p /pgsql/pg_archive10

mkdir -p /pgsql/pg_log10

chown -R postgres:postgres /pgsql/pg_data10

 

su - postgres

export PGHOME=/usr/local/pgsql10

export PGDATA=/pgsql/pg_data10

 

初始化后不能启动新的库。

 

/usr/local/pgsql10/bin/initdb -D $PGDATA -E UTF-8 --locale=C -U postgres -W

 

 

查看安装的目录:

 

 

2) 停止旧版本的数据库

pg_ctl stop -D /pgsql/pg_data/ -m fast

 

3) 检查兼容性

为了避免数据库升级失败造成的长时间宕机,升级之前都做兼容性检查。

 

 

检查语句:

/usr/local/pgsql10/bin/pg_upgrade -b /usr/local/pgsql/bin/ -B /usr/local/pgsql10/bin/ -d /pgsql/pg_data/ -D /pgsql/pg_data10/ -k -c

 

 

可以查看已经通过兼容性测试。

值得注意的是pg10跟之前的版本hash 索引结构不一样,升级之后需要重建hash索引。

 

4) 使用PG_UPGRADE普通模式升级

/usr/local/pgsql10/bin/pg_upgrade -b /usr/local/pgsql/bin/ -B /usr/local/pgsql10/bin/ -d /pgsql/pg_data -D /pgsql/pg_data10/

 

 

 图片中提示,如果升级失败,必须重新初始化新的数据库才能够继续进行升级,本次实验中升级成功。

修改postgresql.conf,pg_hba.conf 参数

 

 

 

开启后,检查数据库是否正常运行以及有无报错。

 

二.使用upgrade link模式升级

同样的也是前期准备工作一样,初始化数据库:

把新版本的包上传到/usr/local/src目录 root 执行以下命令

mkdir -p /usr/local/pgsql10

cd /usr/local/src/

tar -zxvf postgresql-10.8.tar.gz

./configure --with-ossp-uuid --prefix=/usr/local/pgsql10

gmake world

gmake install-world

 

mkdir -p /pgsql/pg_data10

mkdir -p /pgsql/pg_archive10

mkdir -p /pgsql/pg_log10

chown -R postgres:postgres /pgsql/pg_data10

 

su - postgres

export PGHOME=/usr/local/pgsql10

export PGDATA=/pgsql/pg_data10

 

/usr/local/pgsql10/bin/initdb -D $PGDATA -E UTF-8 --locale=C -U postgres -W

 

初始化后不能启动新的库。

1) 了解旧版本有那些extension以及表空间

 

2) 检查兼容性

检查语句:

/usr/local/pgsql10/bin/pg_upgrade -b /usr/local/pgsql/bin/ -B /usr/local/pgsql10/bin/ -d /pgsql/pg_data/ -D /pgsql/pg_data10/ -k -c

 

 

3) 使用PG_UPGRADE link模式升级

如果使用了hash 索引,需要重建索引升级完成后(升级的过程中,索引会变为不可用)

 

关闭旧的数据库:

/usr/local/pgsql/bin/pg_ctl stop -D /pgsql/pg_data -m fast

 

/usr/local/pgsql10/bin/pg_upgrade -b /usr/local/pgsql/bin -B /usr/local/pgsql10/bin -d /pgsql/pg_data/ -D /pgsql/pg_data10/ -k

 

 

其中提示,如果想用旧版本,需要把/pgsql/pg_data/global/pg_control.old命名为/pgsql/pg_data/global/pg_control

 

例如测试:

mv /pgsql/pg_data/global/pg_control.old /pgsql/pg_data/global/pg_control

/usr/local/pgsql/bin/pg_ctl start -D /pgsql/pg_data

 

 

还是可以启动使用以前的数据库。

 

由于本次是使用新的版本:

mv /pgsql/pg_data/global/pg_control /pgsql/pg_data/global/pg_control.old

 

启动新的实例。(新的实例端口为5433

pg_ctl start -D /pgsql/pg_data10/

手动收集统计信息:

/usr/local/pgsql10/bin/vacuumdb -a --analyze-in-stages -h127.0.0.1 -p5433

 

 

9版本新的库升级成功,并且开启后,旧的仍然能够通过修改pg_control.old后启动。

貌似10的旧版本

转载于:https://www.cnblogs.com/hmwh/p/11372649.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Linux 下升级 PostgreSQL 版本需要以下步骤: 1. 备份数据库:在升级之前,请务必备份您的 PostgreSQL 数据库。您可以使用 `pg_dump` 工具来备份数据库。 2. 下载新版本:您需要下载并安装新版本PostgreSQL。您可以从官方网站下载对应版本的二进制包或源代码,并根据需要进行编译安装。 3. 停止 PostgreSQL 服务:在升级之前,您需要停止正在运行的 PostgreSQL 服务。您可以使用以下命令停止服务: ``` sudo systemctl stop postgresql ``` 4. 安装新版本:安装新版本PostgreSQL,具体安装方法取决于您的安装方式,可以参考官方文档。 5. 升级数据库:使用 `pg_upgrade` 工具升级数据库。`pg_upgrade` 工具会将旧版本的数据库文件转换为新版本的格式。注意:升级数据库时需要以超级用户身份运行 `pg_upgrade` 工具。 6. 启动 PostgreSQL 服务:升级完成后,您需要重新启动 PostgreSQL 服务。您可以使用以下命令启动服务: ``` sudo systemctl start postgresql ``` 7. 验证升级:启动服务后,使用 `psql` 工具连接到数据库并验证升级是否成功。 ``` psql -U postgres -d <your_database> ``` 如果连接成功并且可以访问您的数据库,则表示升级已经成功完成。 注意:升级 PostgreSQL 版本可能会涉及到大量的数据迁移和格式转换,因此在升级之前,请务必备份您的数据,以防止数据丢失。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值