PostgreSQL如何升级,全在这里了

来源:这里教程网 时间:2026-03-14 21:43:33 作者:

作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万+ 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复, 安装迁移,性能优化、故障应急处理 微信:jem_db QQ交流群:587159446 公众号:IT邦德

文章目录

  • 前言
  • 1.版本迭代
  • 2.升级策略
  • 3.小版本升级
  • 3.1 版本确认
  • 3.2 备份源库
  • 3.3 安装信息
  • 3.4 安装新版本
  • 3.5 关闭源库
  • 3.6 环境变量修改
  • 3.7 重启数据库
  • 4.大版本升级
  • 4.1 版本及安装确认
  • 4.2 安装新版本并初始化
  • 4.3 源库备份
  • 4.4 版本兼容性检查
  • 4.5 升级数据库
  • 4.6 修改环境变量
  • 4.7 更换参数文件及白名单
  • 4.8 重启数据库确认
  • 4.9 收集统计信息
  • 4.10 删除源数据库的数据

    前言

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

    1.版本迭代

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

    image.png

    2.升级策略

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

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

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

    3.小版本升级

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

    3.1 版本确认

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

    image.png

    3.2 备份源库

    pg_dumpall仅支持导出全库数据 pg_dump支持指定所要备份的对象:可以单独备份表、schema或者database。 pg_dumpall -U postgres -f /home/postgres/dball_data.sql

    3.3 安装信息

    查看已经编译的pg当时编译的编译选项, 可以使用 pg_config,这个工具特别有用于开发者和管理员,因为它能提供关于PostgreSQL如何编译、安装路径、编译时使用的选项以及库文件位置等信息。 某些环境可能是RPM包安装,确认 好安装的数据目录 [postgres@pghost01 ~]$ pg_config

    image.png

    3.4 安装新版本

    –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

    3.5 关闭源库

    pg_ctl stop -D /pgccc/pgdata

    3.6 环境变量修改

    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

    3.7 重启数据库

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

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

    image.png

    4.大版本升级

    本案例从14.3升级到15.8

    4.1 版本及安装确认

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

    image.png

    4.2 安装新版本并初始化

    –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

    4.3 源库备份

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

    4.4 版本兼容性检查

    检查新旧数据库版本兼容性 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

    image.png 确保检查结果都是OK,如有异常,根据检查结果进行分析处理。

    4.5 升级数据库

    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/

    image.png

    4.6 修改环境变量

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

    4.7 更换参数文件及白名单

    更换postgresql.config 、pg_hba.conf文件

    4.8 重启数据库确认

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

    image.png

    4.9 收集统计信息

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

    image.png

    4.10 删除源数据库的数据

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

    image.png

  • 相关推荐