postgres数据库大版本升级

news/2024/11/27 16:59:41/文章来源:https://www.cnblogs.com/haoyunkkg/p/18572647

Postgres数据库大版本升级

1.升级的介绍

当前PostgreSQL版本号由主要版本号和次要版本号组成。 10之前的版本由三部分组成,

10开始只有两部分数字组成。例如,在版本号10.1中,10是主要版本号,1是次要版本号,

这意味着这将是主版本10的第一个次要版本。 对于PostgreSQL版本10.0之前的版本,版本号由三个数字组成,例如9.5.3。

在这些情况下,主要版本由版本号的前两个数字组(例如9.5)组成,次要版本是第三个数字,

例如3,这意味着这将是主要版本9.5的第三次要版本。

数据库升级分为两种,一种是小版本迭代升级,另一种是主板本升级。小版本升级很简单,只需要重启一下数据库即可。要在兼容的版本间升级,你只需要简单地在服务器关闭时替换可执行文件并重启服务器。 数据目录则保持不变--次要升级就这么简单。

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

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

目前PG大版本的升级方法主要有以下四种方式:

1.转储数据的方式(pg_dump或pg_dumpall导出数据,pg_restore或psql导入)

2.通过pg_upgrade进行升级

3.pg_logical 扩展进行升级

  1. 通过内置逻辑复制的方式进行版本升级

环境准备

2.1 安装PG9.6

1.创建用户

groupadd -g 70000 pg96

useradd -u 70000 -g pg96 pg96

echo "pg96" | passwd --stdin pg96

2.创建目录

mkdir -p /pg96/{pgdata,archive,scripts,backup,postgresql,soft}

cp /opt/postgresql-9.6.0.tar.gz /pg96/soft/

chown -R pg96:pg96 /pg96

chmod -R 775 /pg96

3.安装依赖

yum install -y cmake make gcc zlib gcc-c++ perl readline readline-devel

yum install -y zlib-devel perl python36 tcl openssl ncurses-devel openldap pam

yum install -y zlib libicu

4.编译

su - pg96

cd /pg96/soft

tar zxvf postgresql-9.6.0.tar.gz

cd postgresql-9.6.0

./configure --prefix=/pg96/postgresql --without-readline

make -j 4 && make install

5.环境变量

cat >> ~/.bash_profile <<"EOF"

export LANG=en_US.UTF-8

export PS1="[\u@\h \W]\$ "

export PGPORT=5400

export PGDATA=/pg96/pgdata

export PGHOME=/pg96/postgresql

export PGUSER=postgres

export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH

export PATH=$PGHOME/bin:$PATH:.

export DATE=`date +"%Y%m%d%H%M"`

export MANPATH=$PGHOME/share/man:$MANPATH

export PGUSER=postgres

export PGDATABASE=postgres

EOF

source ~/.bash_profile

6.初始化

su - pg14

/pg96/postgresql/bin/initdb -D /pg96/pgdata -E UTF8 --locale=en_US.utf8 -U postgres

7.修改参数文件

cat >> /pg96/pgdata/postgresql.conf <<"EOF"

listen_addresses = '*'

port=5400

logging_collector = on

log_directory = 'pg_log'

log_filename = 'postgresql-%a.log'

log_truncate_on_rotation = on

EOF

cat > /pg96/pgdata/pg_hba.conf << EOF

# TYPE DATABASE USER ADDRESS METHOD

local all all trust

host all all 127.0.0.1/32 trust

host all all 0.0.0.0/0 md5

host replication all 0.0.0.0/0 md5

local replication all trust

EOF

8.启动

su - pg96

pg_ctl start

pg_ctl status

netstat -anp | grep 5400

2.2 安装PG14.9

1.创建用户

groupadd -g 60000 pg14

useradd -u 60000 -g pg14 pg14

echo "pg14" | passwd --stdin pg14

2.创建目录

mkdir -p /pg14/{pgdata,archive,scripts,backup,postgresql,soft}

cp /opt/postgresql-14.9.tar.gz /pg14/soft/

chown -R pg14:pg14 /pg14

chmod -R 775 /pg14

3.安装依赖

yum install -y cmake make gcc zlib gcc-c++ perl readline readline-devel

yum install -y zlib-devel perl python36 tcl openssl ncurses-devel openldap pam

yum install -y zlib libicu

4.编译

su - pg14

cd /pg14/soft

tar zxvf postgresql-14.9.tar.gz

cd postgresql-14.9

./configure --prefix=/pg14/postgresql --without-readline

make -j 4 && make install

3. 9.6.0升级到14.9

3.1 设置权限

chown -R pg96:pg96 /pg14

3.2 新版本初始化

su - pg96

rm -rf /pg14/pgdata

/pg14/postgresql/bin/initdb -D /pg14/pgdata -E UTF8 --locale=en_US.utf8 -U postgres

3.3 检查兼容性

/pg14/postgresql/bin/pg_upgrade -c -k -b /pg96/postgresql/bin -B /pg14/postgresql/bin -d /pg96/pgdata -D /pg14/pgdata -p 5400 -P 5432

3.4 创建测试数据

postgres=# create database testdb;

[pg96@centos79 ~]$ pgbench -i -s 10 -U postgres testdb

3.5 执行升级

pg_upgrade升级有三种方式。

1)常规复制方式;不会对旧集簇产生影响,但是当数据文件大时速度慢。

/pg14/postgresql/bin/pg_upgrade -b /pg96/postgresql/bin -B /pg14/postgresql/bin -d /pg96/pgdata -D /pg14/pgdata -p 5400 -P 5432

2)link链接方式;以硬链接方式重用旧的用户数据文件来执行快速升级,节省磁盘空间,但升级后旧集簇不可用,恢复耗时。

/pg14/postgresql/bin/pg_upgrade -k -b /pg96/postgresql/bin -B /pg14/postgresql/bin -d /pg96/pgdata -D /pg14/pgdata -p 5400 -P 5432

3)clone 克隆方式;结合以上两者的优势,它支持在Linux(内核4.5或更高版本)上的Btrfs和XFS(在文件系统创建reflink支持)。

/pg14/postgresql/bin/pg_upgrade --clone -b /pg96/postgresql/bin -B /pg14/postgresql/bin -d /pg96/pgdata -D /pg14/pgdata -p 5400 -P 5432

升级前需要关闭源库

[pg96@localhost pgdata]$ pg_ctl stop

waiting for server to shut down.... done

server stopped

[pg96@centos79 ~]$ /pg14/postgresql/bin/pg_upgrade -k -b /pg96/postgresql/bin -B /pg14/postgresql/bin -d /pg96/pgdata -D /pg14/pgdata -p 5400 -P 5432

3.6 配置文件

cat >> /pg14/pgdata/postgresql.conf <<"EOF"

listen_addresses = '*'

port=5432

logging_collector = on

log_directory = 'pg_log'

log_filename = 'postgresql-%a.log'

log_truncate_on_rotation = on

EOF

cat > /pg14/pgdata/pg_hba.conf << EOF

# TYPE DATABASE USER ADDRESS METHOD

local all all trust

host all all 127.0.0.1/32 trust

host all all 0.0.0.0/0 md5

host replication all 0.0.0.0/0 md5

EOF

新版本的postgresql.conf和pg_hba.conf等配置文件匹配旧集簇参数

3.7 修改环境变量

cat >> ~/.bash_profile <<"EOF"

export LANG=en_US.UTF-8

export PS1="[\u@\h \W]\$ "

export PGPORT=5432

export PGDATA=/pg14/pgdata

export PGHOME=/pg14/postgresql

export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH

export PATH=$PGHOME/bin:$PATH:.

export DATE=`date +"%Y%m%d%H%M"`

export MANPATH=$PGHOME/share/man:$MANPATH

export PGUSER=postgres

export PGDATABASE=postgres

EOF

source ~/.bash_profile

3.8收集统计信息

[pg96@centos79 ~]$ pg_ctl start

/home/pg96/delete_old_cluster.sh

[pg96@centos79 ~]$ /pg14/postgresql/bin/vacuumdb --all --analyze-in-stages

3.9 校验数据

[pg96@centos79 ~]$ psql

postgres=# \l

postgres=# \c testdb postgres

testdb=# \dt

testdb=# select version();

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过本地私有的镜像仓库harbor解决网络原因导致的jdk无法加载而造成的docker打包错误

​各种网络原因,或是docker.io无法访问,或是阿里的镜像源故障,导致java打包发布的时候报错,很影响代码发布的质量。解决思路:墙出去把jdk下载下来,代码使用本地的harbor库进行引用,一劳永逸。此解决方法也适用于国外优质不频繁变动的镜像源的本地化使用。解决方法 1. 墙…

过路车辆识别智慧矿山一体机行人不行车违章识别:安防摄像头中的宽动态如何测量?

在安防监控领域,宽动态技术是衡量摄像头性能的重要指标之一,它直接影响到摄像头在不同光照条件下捕捉图像的能力。随着技术的发展,宽动态技术已经从模拟时代的初步探索,发展到网络高清时代的成熟应用。 一、安防摄像头中的宽动态如何测量? 1、实现方式 模拟时代,实现宽动…

CS3231 Theory of Computation 错题集 归档

埃癸斯 (Aegis) 虽然是高性能的反暗影压制兵装 (Anti-Shadow Suppression Weapon),但她在逻辑推理方面并未得到特殊强化。在辰巳人工岛的月光馆学园插班入学后,埃癸斯常常感觉自己跟不上课程进度。埃癸斯尤其不擅的学科是计算理论 (Theory of Computation);她认为,作为人工…

CS3231 Theory of Computation 归档

计算理论 (Theory of Computation) 当之无愧是计算机科学王冠上的明珠;考虑到我贫瘠的智商,以后估计不会朝 TCS 方向来走;但对这些优雅的理论有一个最基本的了解应当是 CS 学生的素养。 讽刺的是,你坑近二十年前就没有开设这门课了 [1],只得留待交换来上。老师是印度人,口…

vxe-table 实现表格数据分组,按指定字段数据分组

实现表格数据分组,按指定字段数据分组,使用树结构来实现分组功能。 官网:https://vxetable.cn<template><div><vxe-grid v-bind="gridOptions"></vxe-grid></div> </template><script> import XEUtils from xe-utils c…

基于SVG的jquery手势密码解锁插件

这是一款仿安卓的基于SVG的jquery手势密码解锁插件。你可以设置手势密码,以及验证手势密码,使用非常方便。在线演示 下载使用方法 在页面中引入jquery和patternlock.js文件,以及patternlock.css文件。< link href="patternlock.css" rel="stylesheet&qu…

Vmware虚拟机Ubuntu忘记密码怎么办?

适用于VirtualBox和VMWare, 其他虚拟机软件未尝试,理论上其他的虚拟机软件和操作系统也适用。虚拟机的Ubuntu忘记密码后,我们可以尝试进入恢复模式,登录超级用户(root)来修改原用户的密码。进入recovery mode 启动ubuntu,当有进度条时就长按shift,出现以下界面 选择进入 …

机房环境配置指北

机房环境配置指北 Dev-Cpp 谁用这个 /oh VSCode 确保有在官网上下载最新版本的 VSCode。 插件安装C/C++:;Code Runner:;cph(选用):;Python(如有需要):;Latex Workshop(编辑 .tex 文件):。配置编译器 使用 VSCode 需要用户自己提供 C++ 语言的编译器,可以从 win…

AI 助力汽车电子测试:落地应用的六大挑战

引言:AI 的机遇与挑战自从 ChatGPT 横空出世以来,人工智能似乎一夜之间变得无处不在。在日常使用中,我们常常在惊艳与失望之间徘徊:它有时能展现出令人惊叹的能力,洞察深刻、对答如流,有时却又犯下令人哭笑不得的错误。正如 ChatGPT 官方页面的警示语所说:“ChatGPT 也可…

还在为文件版本不同步烦恼?这款工具让你不再焦虑!

碎片化办公时代的困扰,你中招了吗? 现代人的工作习惯与十年前相比发生了翻天覆地的变化。以下几种典型场景,你是否也深有体会?设备切换的痛苦早晨在电脑上打开的文档,到了外出会议时却发现手机上打不开最新版本;任务进度需要重新整理,浪费了宝贵的时间。信息的割裂与丢失…

水域智能监管视频分析服务器水源地入侵识别算法技术与应用守护水域安全

随着科技的飞速发展,视频监控技术已广泛应用于各个领域,从公共安全到环境保护,无不体现着其巨大的价值。在这一背景下,水域智能监管视频分析服务器作为智能监控系统的核心,正不断融合先进的人工智能算法,以实现更为精准、高效的监控目标。其中,水源地入侵识别算法作为一…

LeetCode2 两数相加

请你将两个数相加,并以相同形式返回一个表示和的链表。LeetCode2 两数相加 题目链接:LeetCode2 描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的…