首页 > 数据库 >postgres数据库大版本升级

postgres数据库大版本升级

时间:2024-11-27 17:00:19浏览次数:7  
标签:bin postgresql postgres pg96 数据库 pg14 pgdata 版本升级 pg

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();

标签:bin,postgresql,postgres,pg96,数据库,pg14,pgdata,版本升级,pg
From: https://www.cnblogs.com/haoyunkkg/p/18572647

相关文章

  • fastadmin更改上传附件数据库为附件ID
    1.后台返回值加入IDapplication/admin/controller/Ajax.php文件中upload()方法,2处返回值加上附件ID 这样上传文件后,返回值便会多出file_id字段 2.比如添加商品页面上传商品图,得到file_id;<divclass="form-group"><labelclass="control-labelcol-xs-12co......
  • 【python应用】pySchema4neo : 一个简化Neo4j数据库操作的Python库
    在当今的数据分析领域,图数据库因其独特的存储方式和对复杂关系的处理能力而备受关注。Neo4j作为图数据库的佼佼者,拥有广泛的用户群体。对于Python开发者来说,pySchema4neo库的出现,无疑为使用Python与Neo4j交互提供了极大的便利。本文将详细介绍pySchema4neo库的安装、基本用法、高......
  • 【计算机毕业设计推荐】基于springboot的青少年心理健康教育网站的设计与实现 【附源
    ✍✍计算机编程指导师⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java实战|SpringBoot/SSMPython实战项目|Django微信小程......
  • GaussDB数据库SQL系列-表连接(JOIN)
    一、前言SQL是用于数据分析和数据处理的最重要的编程语言之一,表连接(JOIN)是数据库中SQL的一种常见操作,在实际应用中,我们需要根据业务需求从两个或多个相关的表中获取信息。二、GaussDBJOINGaussDB是华为推出的企业级分布式关系型数据库。GaussDBJOIN子句是基于两个或者多个表......
  • GaussDB数据库SQL系列-UNION & UNION ALL
    一、前言SQL(结构化查询语言)是一种用于管理关系型数据库的标准语言。它允许用户通过使用SQL语言来操作数据库中的数据。而在SQL中,UNION是一个非常强大的功能,它可以将多个SELECT语句的结果合并成一个结果集。本文将以GaussDB数据库为例,介绍一下UNION操作符的使用。二、GaussDBUN......
  • GaussDB数据库SQL系列-SQL与ETL浅谈
    一、前言在SQL语言中,ETL(抽取、转换和加载)是一种用于将数据从源系统抽取到目标系统的过程。ETL过程通常包括三个阶段:抽取(Extract)、转换(Transform)和加载(Load)。但这些其实都脱离不了数据库系统,本节从GaussDB数据库生态出发,给大家简单讲一下SQL与ETL的过程与关系。二、SQL与ETL的......
  • 数据库小版本升级
    PostgresQL14.9升级到14.13step1.查看当前数据库版本和测试数据[postgres@localhost~]$postgres-Vpostgres(PostgreSQL)14.11[postgres@localhost~]$psqlpsql(14.11)Type"help"forhelp.postgres=#postgres=#selectversion();version-----------------......
  • Educator头歌MySQL数据库实验五:授权及回收权限
    在开始讲解以及分享答案之前如果粘贴答案失效,请点击头歌系统右上角的电源键,释放资源重载数据库,再次进入才能正确通过第1关:授予某数据库的所有权限100任务要求参考答案记录评论任务描述相关知识MySql系统库中的权限表访问控制的两个阶段:授予的权限等级:MySQL权限类型grant......
  • 第三方数据库连接免费使用和安装
    是强大的一体化数据库开发解决方案,可从单一应用程序无缝连接多个数据库,包括MySQL、PostgreSQL、MongoDB、MariaDB、SQLServer、Oracle、SQLite和Redis。下载:https://download.csdn.net/download/mo3408/90045937升级特性模型:快速建模,简化执行,快速精确的设计数据字典:......
  • SpringBoot长春轨道交通查询管理82k2s 程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:用户,站点信息,线路信息,线路定制开题报告内容一、项目背景随着城市化进程的加速,轨道交通在长春市的公共交通体系中占据了越来越重要的地位。然而,现......