问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

PostgreSQL数据库升级指南:小版本到大版本的详细步骤

创作时间:
作者:
@小白创作中心

PostgreSQL数据库升级指南:小版本到大版本的详细步骤

引用
1
来源
1.
https://www.modb.pro/db/1832917843613065216

PostgreSQL作为一款开源的关系型数据库管理系统,其版本更新频繁,功能不断完善。为了确保数据库的安全性和稳定性,定期升级数据库版本是非常必要的。本文将详细介绍PostgreSQL的小版本和大版本升级方法,帮助数据库管理员顺利完成升级工作。

前言

PostgreSQL遇到的BUG问题,社区会很快进行修复,并在下一个版本中发布,因此有必要进行对数据库版本升级。

版本迭代

PostgreSQL全球开发组计划每年发布一个包含新功能的主要版本(major version)。同时,对于每个主要版本,至少每 1个季度会发布一个次要版本(minor release),用于修复问题和安全漏洞。

升级策略

数据库升级分为两种,一种是小版本迭代升级,另一种是大版本升级。

小版本升级很简单,你只需要简单地在服务器关闭时替换可执行文件并重启服务器,数据目录则保持不变,次要升级就这么简单。

对于PostgreSQL的大版本发行,内部数据存储格式常被改变,这使升级复杂化。传统的把数据移动到新主版本的方法是先转储然后重新载入到数据库,不过这可能会很慢,所以使用一种更快的方式pg_upgrade。

小版本升级

本次以PostgreSQL14.11升级到14.13为例,升级到过程中确认是否有扩展插件、数据库块大小尤其要注意–with编译时需要包含的特定功能或库。

版本确认

[postgres@pghost01 ~]$ postgres -V
postgres=# select version();

备份源库

pg_dumpall仅支持导出全库数据
pg_dump支持指定所要备份的对象:可以单独备份表、schema或者database。

pg_dumpall -U postgres -f /home/postgres/dball_data.sql

安装信息

查看已经编译的pg当时编译的编译选项, 可以使用 pg_config,这个工具特别有用于开发者和管理员,因为它能提供关于PostgreSQL如何编译、安装路径、编译时使用的选项以及库文件位置等信息。

某些环境可能是RPM包安装,确认 好安装的数据目录

[postgres@pghost01 ~]$ pg_config

安装新版本

–root用户
cd /opt
tar -zxvf postgresql-14.13.tar.gz
chown -R postgres:postgres /opt/postgresql-14.13
–postgres用户
mkdir /pgccc/pgsql-14.13
cd /opt/postgresql-14.13
./configure --prefix=/pgccc/pgsql-14.13 --with-libxml --without-readline
make && make install

关闭源库

pg_ctl stop -D /pgccc/pgdata

环境变量修改

vi .bash_profile
export PGHOME=/pgccc/14.13
export PATH=/pgccc/pgsql-14.13/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:.
source .bash_profile

重启数据库

因为修改了环境变量,此时重启数据即可,升级前后数据文件目录不变,此时确认版本升级OK

pg_ctl start -D /pgccc/pgdata
[postgres@pghost01 ~]$ postgres -V
postgres=# select version();

大版本升级

本案例从14.3升级到15.8

版本及安装确认

[postgres@pghost01 ~]$psql -V
[postgres@pghost01 ~]$pg_config

安装新版本并初始化

–root用户
cd /opt
tar -zxvf postgresql-15.8.tar.gz
chown -R postgres:postgres /opt/postgresql-15.8
–postgres用户
mkdir /pgccc/pgsql-15.8
cd /opt/postgresql-15.8
./configure --prefix=/pgccc/pgsql-15.8 --with-libxml --without-readline
make && make install
mkdir /pgccc/pgsql-15.8/pgdata
/pgccc/pgsql-15.8/bin/initdb  -D /pgccc/pgsql-15.8/pgdata -E UTF8 --locale=en_US.utf8 -U postgres

源库备份

pg_dumpall -U postgres -f /home/postgres/dumpall_data.sql
备份之后记得关闭源生产库
pg_ctl stop -D /pgccc/pgdata

版本兼容性检查

检查新旧数据库版本兼容性

cd /pgccc/pgsql-15.8/bin
./pg_upgrade --old-datadir /pgccc/pgdata/
--new-datadir /pgccc/pgsql-15.8/pgdata/
--old-bindir /pgccc/pgsql-14.13/bin/
--new-bindir /pgccc/pgsql-15.8/bin/ --check
确保检查结果都是OK,如有异常,根据检查结果进行分析处理。

升级数据库

cd /pgccc/pgsql-15.8/bin
./pg_upgrade --old-datadir /pgccc/pgdata/
--new-datadir /pgccc/pgsql-15.8/pgdata/
--old-bindir /pgccc/pgsql-14.13/bin/
--new-bindir /pgccc/pgsql-15.8/bin/

修改环境变量

vi .bash_profile
export PGDATA=/pgccc/pgsql-15.8/pgdata
export PGHOME=/pgccc/pgsql-15.8
export PATH=/pgccc/pgsql-15.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:.

更换参数文件及白名单

更换postgresql.config 、pg_hba.conf文件

重启数据库确认

[postgres@pghost01 ~]$pg_ctl start
postgres=# select version();

收集统计信息

[postgres@pghost01 ~]$/pgccc/pgsql-15.8/bin/vacuumdb --all --analyze-in-stages

删除源数据库的数据

sh /pgccc/pgsql-15.8/bin/delete_old_cluster.sh

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号