PostgreSQL 16.2 → 16.14 小版本升级操作手册

PostgreSQL 16.2 → 16.14 小版本升级操作手册
PostgreSQL 16.2 → 16.14 小版本升级操作手册文档基础信息项目内容当前运行版本PostgreSQL 16.2源码编译目标升级版本PostgreSQL 16.14统一安装路径/usr/local/pgsql数据目录不改动/data/pgdata/编译标准参数--prefix/usr/local/pgsql --with-ossp-uuid --with-openssl --with-system-tzdata/usr/share/zoneinfo升级类型小版本原地覆盖升级数据目录无需 initdb兼容同主版本所有小版本适用系统CentOS/Rocky/ 银河麒麟 V10、Ubuntu/Debian前置要求业务停机、tzdata 时区包升级、完整二进制 逻辑备份一、升级前置确认与环境预处理1.1 业务停机要求升级操作必须在业务低峰窗口执行停止所有应用、定时任务、ETL同步、备份脚本、连接池确认无长事务、无在线 DDL、无 pg_dump 逻辑备份任务运行。1.2 时区包强制升级解决 Asia/Shanghai 时区 7 小时偏移 / 启动失败PG16 系列依赖系统时区文件旧 tzdata 会导致时区异常、数据库启动报错必须升级# RHEL/CentOS/麒麟yum upgrade -y tzdata# Rocky8/Fedoradnf upgrade -y tzdata# 验证升级后版本rpm -q tzdata# 修复系统时区软链接ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime1.3 查看当前运行版本确认# 查看二进制版本/usr/local/pgsql/bin/psql --version# 数据库内确认版本su - postgrespsql -c SELECT version();1.4 系统依赖完整性校验# RHEL系yum install -y gcc gcc-c make bison flex readline-devel zlib-devel openssl-devel libicu-devel libuuid-devel# Ubuntu系apt install -y gcc g make bison flex libreadline-dev zlib1g-dev libssl-dev libicu-dev libuuid-dev二、全量备份升级前三道防线缺一不可2.1 二进制程序目录备份回滚核心覆盖安装会直接替换 /usr/local/pgsql 二进制必须提前备份旧程序# 带时间戳备份cp -r -a /usr/local/pgsql /usr/local/pgsql.bak_$(date %Y%m%d_%H%M%S)# 校验备份文件存在ls -ld /usr/local/pgsql.bak_*2.2 数据库逻辑全量备份数据兜底# 创建备份目录mkdir -p /data/pg_backup# 全库导出所有库、用户、表结构、数据sudo -u postgres pg_dumpall /data/pg_backup/pg_all_backup_$(date %Y%m%d_%H%M%S).sql# 校验备份文件生成、文件大小非0ls -lh /data/pg_backup/pg_all_backup_*.sql2.3 业务自有备份脚本执行# 执行项目自定义定时备份脚本./runBackup.sh三、下载 16.14 源码并解压# 进入临时目录cd /tmp# 下载16.14源码wget https://ftp.postgresql.org/pub/source/v16.14/postgresql-16.14.tar.gz# 解压tar -zxvf postgresql-16.14.tar.gzcd postgresql-16.14四、编译新版本源码4.1 清理旧编译缓存make distclean4.2 标准 configure 编译与旧版本编译参数完全一致关键编译参数必须和原 16.2 完全相同否则扩展、SSL、uuid 插件会失效升级到最新版本重启postgresql时区会报错指定系统时区路径--with-system-tzdata/usr/share/zoneinfo./configure \--prefix/usr/local/pgsql \--with-ossp-uuid \--with-openssl \--with-system-tzdata/usr/share/zoneinfo4.3 完整编译包含 contrib 全部扩展# 多核并行编译利用全部CPU核心make -j$(nproc) world编译耗时5~15 分钟服务器 CPU 核心越多速度越快成功标识PostgreSQL, contrib, and documentation successfully made. Ready to install.五、停止现有 PostgreSQL 服务5.1 停止数据库fast 模式快速回滚未提交事务# systemd方式systemctl stop postgresql# 原生pg_ctl方式备用/usr/local/pgsql/bin/pg_ctl stop -D /data/pgdata/ -m fast5.2 校验 postgres 进程完全退出ps aux | grep postgres | grep -v grep输出为空代表进程全部关闭存在残留进程需手动 kill 终止。六、原地覆盖安装新版本二进制# 覆盖安装到原/usr/local/pgsql目录make install-world校验新二进制版本/usr/local/pgsql/bin/pg_ctl --version# 预期输出pg_ctl (PostgreSQL) 16.14/usr/local/pgsql/bin/psql --version七、启动新版本数据库数据目录不变7.1 启动服务# systemd管理systemctl start postgresql# 原生启动备用/usr/local/pgsql/bin/pg_ctl start -D /data/pgdata/7.2 查看启动日志排查 ERROR/FATAL 报错# 日志存放于数据目录示例tail -100 /data/pgdata/postgresql-*.log# 自定义日志目录替换路径tail -100 /var/log/pg16/postgresql-*.log日志无 FATAL、ERROR、时区报错即为启动正常。八、升级后全面功能验证切换 postgres 用户执行验证su - postgres确认数据库内核版本SELECT version();-- 预期PostgreSQL 16.14校验扩展完整性uuid-ossp、pgcrypto 等SELECT extname,extversion FROM pg_extension;查看全库列表\l基础 SQL 可用性校验SELECT 1;SELECT current_timestamp;SELECT now();时区校验规避 7 小时时差问题sqlSHOW timezone;SHOW log_timezone;UUID 函数校验验证 --with-ossp-uuid 编译生效SELECT uuid_generate_v4();九、systemd 服务确认路径未发生变更无需修改 service 文件仅确认运行状态systemctl status postgresql# 正常状态active (running)systemctl enable postgresql十、升级收尾清理规范清理临时源码包可选rm -rf /tmp/postgresql-16.14 /tmp/postgresql-16.14.tar.gz二进制备份文件保留策略/usr/local/pgsql.bak_*备份至少保留 7 天业务稳定无异常后再删除十一、升级失败完整回滚流程1. 停止新版本数据库systemctl stop postgresql/usr/local/pgsql/bin/pg_ctl stop -D /data/pgdata/ -m fast2. 删除覆盖后的新版程序目录rm -rf /usr/local/pgsql3. 恢复升级前备份的旧二进制# 修改为你实际备份的时间戳目录mv /usr/local/pgsql.bak_20260717_103000 /usr/local/pgsql4. 使用旧版本启动数据库systemctl start postgresql# 或/usr/local/pgsql/bin/pg_ctl start -D /data/pgdata/5. 验证回滚版本/usr/local/pgsql/bin/psql -c SELECT version();# 应恢复为 PostgreSQL 16.2十二、升级注意事项 坑点规避1.编译参数必须完全一致新增 / 删减编译参数会导致原有扩展失效、SSL 连接报错2.小版本升级数据目录无需 initdb同主版本 16.x 数据完全兼容禁止重新初始化3.timezone Asia/Shanghai 新版启动会失败需要编译时指定系统时区路径4.覆盖安装前必须停库运行中直接 make install 会导致二进制文件损坏、数据库崩溃5.所有备份文件分开存储逻辑备份不要放在数据盘防止磁盘故障丢失6.国产麒麟系统最小化镜像需完整安装 tzdata不要使用精简时区包7.若编译新增 pg_duckdb 等第三方插件升级后需重新编译对应插件适配 16.14。