PostgreSQL进行大版本升级

概述

Postgresql从9.6 版本以后,版本命名规则都是以 大版本.小版本 的形式,如 10.5、11.2 等,针对相同大版本,升级小版本的场景,通常情况直接替换安装包即可。 对于大版本不同的情况,因为元数据结构可能变化,需要进行数据升级,本文就介绍一下具体的升级步骤

主要步骤:
1、关闭低版本数据库
2、上传高版本软件包,并配置好数据目录,初始化完成
3、进行版本间的升级check
4、进行版本数据升级
5、基础配置文件替换,启动新库
6、配置好环境,使其重新适配ambari平台

命令pg_upgrade

用于不同大版本之间的数据库升级,以下是一些描述

Before running pg_upgrade you must:
  create a new database cluster (using the new version of initdb)
  shutdown the postmaster servicing the old cluster
  shutdown the postmaster servicing the new cluster

When you run pg_upgrade, you must provide the following information:
  the data directory for the old cluster  (-d DATADIR)
  the data directory for the new cluster  (-D DATADIR)
  the "bin" directory for the old version (-b BINDIR)
  the "bin" directory for the new version (-B BINDIR)

可以看到,命令有几个前提:
1、新库必须要先初始化
2、新旧库均需处于关闭状态
3、需要配置新旧库之前的配置文件目录

下面就测试由11.6升级到15.4 , 具体演示如下

升级步骤

1、升级规划

版本软件安装目录数据目录
11.6/home/pgsql/postgresql/data01/pgsql/data/
15.4/home/pgsql/postgresql-15.4/data01/pgsql/data_15.4/

新的数据目录先建好,赋予权限

2、新库初始化

需要将postgresql-15.4.tar.gz 上传至服务器,解压,进入bin目录

[pgsql@gwtest01 bin]$ initdb -D /data01/pgsql/data_15.4/
The files belonging to this database system will be owned by user "pgsql".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /data01/pgsql/data_15.4 ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default timezone ... Asia/Shanghai
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    pg_ctl -D /data01/pgsql/data_15.4/ -l logfile start

不要启动新库

3、关闭旧库,进行升级检查

关闭旧库:

$ pg_ctl stop
waiting for server to shut down.... done
server stopped

设置环境变量:

export PGDATAOLD=/data01/pgsql/data
export PGDATANEW=/data01/pgsql/data_15.4
export PGBINOLD=/home/pgsql/postgresql/bin
export PGBINNEW=/home/pgsql/postgresql-15.4/bin

进行升级检查:

$ /home/pgsql/postgresql-15.4/bin/pg_upgrade -d $PGDATAOLD -D $PGDATANEW -b $PGBINOLD -B $PGBINNEW -c
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 system-defined composite types in user tables  ok
Checking for reg* data types in user tables                 ok
Checking for contrib/isn with bigint-passing mismatch       ok
Checking for user-defined encoding conversions              ok
Checking for user-defined postfix operators                 ok
Checking for incompatible polymorphic functions             ok
Checking for tables WITH OIDS                               ok
Checking for invalid "sql_identifier" user columns          ok
Checking for presence of required libraries                 ok
Checking database user is the install user                  ok
Checking for prepared transactions                          ok
Checking for new cluster tablespace directories             ok

*Clusters are compatible*

像上面一样输出,就说明没有问题,可以继续
4、报错处理
检查时会遇到一些报错,常见以下问题

$/home/pgsql/postgresql-15.4/bin/pg_upgrade -d $PGDATAOLD -D $PGDATANEW -b $PGBINOLD -B $PGBINNEW -c
/home/pgsql/postgresql-15.4/bin/postgres: error while loading shared libraries: libzstd.so.1: cannot open shared object file: No such file or directory
no data was returned by command ""/home/pgsql/postgresql-15.4/bin/postgres" -V"

check for "/home/pgsql/postgresql-15.4/bin/postgres" failed: cannot execute
Failure, exiting

高版本pg需要依赖libzstd 去Root下安装即可 yum install libzstd -y

$ pg_upgrade -d $PGDATAOLD -D $PGDATANEW -b $PGBINOLD -B $PGBINNEW -c
Performing Consistency Checks
-----------------------------
Checking cluster versions
New cluster data and binary directories are from different major versions.
Failure, exiting

此报错原因是pg_upgrade 的命令使用的是环境变量中的,也就是旧版本的命令,需要使用高版本的pg_upgrade 命令

5、升级数据库

$ /home/pgsql/postgresql-15.4/bin/pg_upgrade -d $PGDATAOLD -D $PGDATANEW -b $PGBINOLD -B $PGBINNEW
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 system-defined composite types in user tables  ok
Checking for reg* data types in user tables                 ok
Checking for contrib/isn with bigint-passing mismatch       ok
Checking for user-defined encoding conversions              ok
Checking for user-defined postfix operators                 ok
Checking for incompatible polymorphic functions             ok
Checking for tables WITH OIDS                               ok
Checking for invalid "sql_identifier" user columns          ok
Creating dump of global objects                             ok
Creating dump of database schemas
                                                            ok
Checking for presence of required libraries                 ok
Checking database user is the install user                  ok
Checking for prepared transactions                          ok
Checking for new cluster tablespace directories             ok

If pg_upgrade fails after this point, you must re-initdb the
new cluster before continuing.

Performing Upgrade
------------------
Analyzing all rows in the new cluster                       ok
Freezing all rows in the new cluster                        ok
Deleting files from new pg_xact                             ok
Copying old pg_xact to new server                           ok
Setting oldest XID for new cluster                          ok
Setting next transaction ID and epoch for new cluster       ok
Deleting files from new pg_multixact/offsets                ok
Copying old pg_multixact/offsets to new server              ok
Deleting files from new pg_multixact/members                ok
Copying old pg_multixact/members to new server              ok
Setting next multixact ID and offset for new cluster        ok
Resetting WAL archives                                      ok
Setting frozenxid and minmxid counters in new cluster       ok
Restoring global objects in the new cluster                 ok
Restoring database schemas in the new cluster
                                                            ok
Copying user relation files
                                                            ok
Setting next OID for new cluster                            ok
Sync data directory to disk                                 ok
Creating script to delete old cluster                       ok
Checking for extension updates                              ok

Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade.
Once you start the new server, consider running:
    /home/pgsql/postgresql-15.4/bin/vacuumdb --all --analyze-in-stages

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

启动新库:

$ pwd
/home/pgsql/postgresql-15.4/bin

$ ./pg_ctl start -D  /data01/pgsql/data_15.4
waiting for server to start....2023-09-04 15:32:44.100 CST [5963] LOG:  starting PostgreSQL 15.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
2023-09-04 15:32:44.100 CST [5963] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2023-09-04 15:32:44.101 CST [5963] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2023-09-04 15:32:44.104 CST [5966] LOG:  database system was shut down at 2023-09-04 15:29:43 CST
2023-09-04 15:32:44.107 CST [5963] LOG:  database system is ready to accept connections
 done
server started

复制旧库配置文件

$ cp /data01/pgsql/data/postgresql.conf /data01/pgsql/data_15.4/postgresql.base.conf
$ cp /data01/pgsql/data/pg_hba.conf /data01/pgsql/data_15.4/pg_hba.conf

$ vi /data01/pgsql/data_15.4/postgresql.conf
最下面添加内容:
include postgresql.base.conf

设置环境变量,检查新库数据

$ export LD_LIBRARY_PATH=/home/pgsql/postgresql-15.4/lib/
$ ./psql
psql (15.4)
Type "help" for help.

postgres=# \d
         List of relations
 Schema |   Name   | Type  | Owner
--------+----------+-------+-------
 public | gwtest01 | table | pgsql
 public | gwtest02 | table | pgsql
 public | gwtest03 | table | pgsql
(3 rows)

postgres=# select * from gwtest01 ;
 id | name
----+------
  1 | aaaa
  1 | aaaa
  1 | aaaa
(3 rows)

更新新库的统计信息

$ /home/pgsql/postgresql-15.4/bin/vacuumdb --all --analyze-in-stages
vacuumdb: processing database "gwtest": Generating minimal optimizer statistics (1 target)
vacuumdb: processing database "postgres": Generating minimal optimizer statistics (1 target)
vacuumdb: processing database "template1": Generating minimal optimizer statistics (1 target)
vacuumdb: processing database "gwtest": Generating medium optimizer statistics (10 targets)
vacuumdb: processing database "postgres": Generating medium optimizer statistics (10 targets)
vacuumdb: processing database "template1": Generating medium optimizer statistics (10 targets)
vacuumdb: processing database "gwtest": Generating default (full) optimizer statistics
vacuumdb: processing database "postgres": Generating default (full) optimizer statistics
vacuumdb: processing database "template1": Generating default (full) optimizer statistics

此时,新库数据库已经升级完成

重新适配ambari平台

1、将旧库备份或删除

数据盘盘够推荐先改名,不要删除

$ mv postgresql postgresql_bak
$ mv /data01/pgsql/data /data01/pgsql/data_bak

2、关闭新库,创建软链

$ ./postgresql-15.4/bin/pg_ctl stop  -D  /data01/pgsql/data_15.4
waiting for server to shut down....2023-09-04 17:35:13.470 CST [5963] LOG:  received fast shutdown request
2023-09-04 17:35:13.471 CST [5963] LOG:  aborting any active transactions
2023-09-04 17:35:13.473 CST [5963] LOG:  background worker "logical replication launcher" (PID 5969) exited with exit code 1
2023-09-04 17:35:13.473 CST [5964] LOG:  shutting down
2023-09-04 17:35:13.474 CST [5964] LOG:  checkpoint starting: shutdown immediate
2023-09-04 17:35:13.476 CST [5964] LOG:  checkpoint complete: wrote 0 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.001 s, sync=0.001 s, total=0.004 s; sync files=0, longest=0.000 s, average=0.000 s; distance=0 kB, estimate=1931 kB
2023-09-04 17:35:13.484 CST [5963] LOG:  database system is shut down
 done
server stopped

设置软链:

[pgsql@gwtest01 ~]$ ln -s postgresql-15.4/ postgresql
[pgsql@gwtest01 ~]$ cd /data01/pgsql/
[pgsql@gwtest01 pgsql]$ pwd
/data01/pgsql
[pgsql@gwtest01 pgsql]$ ls
data_15.4  data_bak
[pgsql@gwtest01 pgsql]$ ln -s data_15.4/ data

后面就可以原环境变量直接启动使用

[pgsql@gwtest01 pgsql]$ pg_ctl  start
waiting for server to start....2023-09-04 17:37:37.972 CST [14380] LOG:  starting PostgreSQL 15.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
2023-09-04 17:37:37.973 CST [14380] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2023-09-04 17:37:37.974 CST [14380] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2023-09-04 17:37:37.976 CST [14383] LOG:  database system was shut down at 2023-09-04 17:35:13 CST
2023-09-04 17:37:37.980 CST [14380] LOG:  database system is ready to accept connections
 done
server started

[pgsql@gwtest01 pgsql]$ psql
psql (15.4)
Type "help" for help.

postgres=#

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/632203.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu虚拟机的 网卡不见了?

通过 ifconfig 命令查找不到自己的虚拟机上网网卡了,虚拟机的上网网卡名字是ens33 发现只有一个本地回环地址 执行如下两条指令可恢复网卡 sudo dhclient ens33#获取ip sudo ifconfig ens33#查看ip 再次通过ifconfig查看网卡信息

HP5V80、HP5V105、HP3V28电比例驱动柱塞泵放大器

HP5V80、HP5V105、HP3V28、HP3V45、HP3V60、HP3V80、HP3V125、HP3V140带电比例控制泵放大器,变排量泵的排量可通过由BEUEC比例放大器输出到比例电磁阀电流变化而进行调整,控制电流范围为300mA至800mA(24VDC)或600mA至1600mA(12VDC)。主要适合应用于工程机…

植物大战僵尸杂交版(含下载方式)

最近时间,一款很火的植物大战僵尸杂交版火爆出圈,在玩家之间疯狂扩散。各种奇特的杂交组合让游戏变得更加有趣。 游戏介绍 植物大战僵尸杂交版是一款将《植物大战僵尸》和植物杂交概念结合在一起的独特塔防策略游戏。它将《植物大战僵尸》中的植物与进行…

沉钒废水回收钒

沉钒废水处理与钒回收的重要性 沉钒废水是含钒元素的特殊废水,钒在工业生产中广泛应用,但其排放造成资源浪费与环境威胁。为实现钒的有效回收,研究和实践了多种处理技术。 沉钒废水处理技术 1. 化学沉淀法:添加沉淀剂&#xff…

使用OverPy API批量获取OpenStreetMap(OSM)城市路网png图片和svg矢量图

在地理信息系统(GIS)和数据可视化领域,获取城市路网的图像对于分析和展示城市交通结构至关重要。OpenStreetMap (OSM) 是一个免费且开放的地理数据源,而OverPy 是一个用于访问OSM数据的Python库。本文将详细介绍如何使用OverPy AP…

push to origin/master was rejected解决方案之一

如果你是git小白,并且其他帖子的方法都不行,可以一试 在你的远程库(我这个是gitee)设置中的邮箱设置里不勾这个选项 然后就没有然后了。

仓库数据同步难题如何轻松破解?

一、客户介绍 某食品科技有限公司,是一家集研发、生产、销售于一体的现代化食品科技企业。公司的经营范围广泛,涵盖饮料生产、食品生产、食品经营(销售散装食品)、食品互联网销售以及货物进出口等多个领域。通过数字化冷链物流监…

ALV 图标显示

前言 在ABAP ALV中,使用fieldcat来定义列表中每个字段的显示属性,包括图标(Icon)的显示。图标可以在ALV列表中为特定列的行或标题添加图形元素,以增强视觉提示或传达附加信息。 ICON查询 图标的名称用事务码”ICON“进…

【无标题】海图微电子产品

一、HT2300 1、产品介绍 HT2300在全分辨率 (1920 H 1080 V) 下,它们的帧率可达2500fps。加上全局快门像素和低噪声等特性,可满足对高分辨率,高速CMOS图像传感器的需求,适用于科学研究,工业检测和数字影视中高速视频捕捉…

【数据链路层】以太网帧包解析

文章目录 以太网的帧结构解析数据链路层信息 以太网的帧结构 使用抓包工具,查看数据链路层信息: 解析数据链路层信息 (1)协议类型:代表上层的协议 (IP00800 ARP00806 IPv686DD ) 如图中所示&a…

2024 Google I/O - 提前窥探 Android 15 的新功能与适配

今年年初就简单介绍过 Android 15 预览版 的相关内容,而昨天 Google I/O 宣布了 Android 15 Beta2,作为第二个 Beta 版本 ,它已经基本接近它未来的样子,毕竟下个版本就是 Platform Stability 了,所以让我们提前来一睹 …

电脑恢复出厂设置怎么弄?让你的电脑焕然一新!

电脑恢复出厂设置是一种常见的操作,它可以帮助用户将电脑恢复到初始状态,清除所有数据和设置,使其恢复到出厂时的状态。这对于解决系统故障、清除个人数据以及重新配置电脑等情况非常有用。可是电脑恢复出厂设置怎么弄呢?本文将介…

网络安全快速入门(十三)linux及vmware软件的网络配置

13.1 前言 在通过我们前面的了解,我们现在已经对Linux的基础知识有了大致的了解,今天我们来大概讲一下关于linux系统及vmware的网络配置问题,在这之前,我们需要对网络有一个大概的认识和了解,话不多说,我们…

「AI模型瘦身术」——知识蒸馏技术综述

使用KD原因 遇到问题:从产业发展的角度来看工业化将逐渐过渡到智能化,边缘计算逐渐兴起预示着 AI 将逐渐与小型化智能化的设备深度融合,这也要求模型更加的便捷、高效、轻量以适应这些设备的部署。 解决方案:知识蒸馏技术 知识…

记一次:mysql统计的CAST函数与json字段中的某个字段

前言:因为需求的问题,会遇到将某个json存入到一个字段中,但在统计的时候,又需要将这个json中的某个字段作为条件来统计,所以整理了一下cast函数和json中某个字段的条件判断 一、浅谈mysql的json 1.1 上例子 SELECTli…

管仲故乡是颍川,何分颍上或颍下

第一仲父管仲,故乡在哪里?依然像许多名人故里一样存在争议,但是这个争议却很不一般,引出了一个大话题。 管子是安徽颍上县人,《史记》记载: “管仲,颍上人也。”颍上县有管鲍祠,是安徽省重点文物…

【小项目】简单实现博客系统(一)(前后端结合)

一、实现逻辑 1)实现博客列表页 让页面从服务器拿到博客数据(数据库) 2)实现博客详情页 点击博客的时候,可以从服务器拿到博客的完整数据 3)实现登录功能(跟之前写的登录页面逻辑一致&…

羊大师解析,春季羊奶助力健康成长

羊大师解析,春季羊奶助力健康成长 随着春天的到来,万物复苏,大自然呈现出一派生机勃勃的景象。在这个充满希望的季节里,我们不仅要关注外界环境的变化,更要关注身体的健康和成长。羊大师发现羊奶作为一种营养丰富的食…

探索未来:苹果如何在 Apple Vision Pro 上进行创新

视觉体验的演进 在当今快节奏的数字化时代,技术创新不断塑造着我们与周围世界互动的方式。在这些进步中,苹果视觉专业技术凭借其创新精神脱颖而出,彻底改变了我们感知和参与视觉内容的方式。 无与伦比的显示技术 苹果视觉专业技术的核心是…