数据库小版本升级

news/2024/11/27 14:22:59/文章来源:https://www.cnblogs.com/haoyunkkg/p/18572098

PostgresQL14.9升级到14.13

step 1.查看当前数据库版本和测试数据

[postgres@localhost ~]$ postgres -V

postgres (PostgreSQL) 14.11

[postgres@localhost ~]$ psql

psql (14.11)

Type "help" for help.

postgres=#

postgres=# select version();

version

----------------------------------------------------------------------------------------------------------

PostgreSQL 14.11 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit

(1 row)

postgres=# create table test(id int,name text);

CREATE TABLE

postgres=# insert into test values(1,'a');

INSERT 0 1

postgres=# \q

step 2.备份源库

pg_dumpall -U postgres -f /home/postgres/dumpall_data.sql

[postgres@localhost ~]$ pg_dumpall -U postgres -f /home/postgres/dumpall_data.sql

[postgres@localhost ~]$

[postgres@localhost ~]$ more dumpall_data.sql

--

-- PostgreSQL database cluster dump

--

SET default_transaction_read_only = off;

SET client_encoding = 'UTF8';

SET standard_conforming_strings = on;

--

-- Roles

--

CREATE ROLE appauditor;

ALTER ROLE appauditor WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'SCRAM-SHA-256$4096:2tS6p/7oJnQ6V5jMNcAxZw==$aTtOrt6/+8WlvgMzBeU8NnG/xjtajSybHBrMZvmRDj4=:9amsGr+U

E0RCyPpWre7R8qGDpa3uFztJEovFIHmP0YA=';

step 3.查看编译选项

如何查看已经编译的pg当时编译的编译选项,可以使用pg_config。

pg_config 工具打印当前安装的 postgres版本配置参数。

[postgres@localhost ~]$ pg_config

BINDIR = /pg14/soft/bin

DOCDIR = /pg14/soft/share/doc/postgresql

HTMLDIR = /pg14/soft/share/doc/postgresql

INCLUDEDIR = /pg14/soft/include

PKGINCLUDEDIR = /pg14/soft/include/postgresql

INCLUDEDIR-SERVER = /pg14/soft/include/postgresql/server

LIBDIR = /pg14/soft/lib

PKGLIBDIR = /pg14/soft/lib/postgresql

LOCALEDIR = /pg14/soft/share/locale

MANDIR = /pg14/soft/share/man

SHAREDIR = /pg14/soft/share/postgresql

SYSCONFDIR = /pg14/soft/etc/postgresql

PGXS = /pg14/soft/lib/postgresql/pgxs/src/makefiles/pgxs.mk

CONFIGURE = '--prefix=/pg14/soft' '--with-openssl'

CC = gcc -std=gnu99

CPPFLAGS = -D_GNU_SOURCE

CFLAGS = -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2

CFLAGS_SL = -fPIC

LDFLAGS = -Wl,--as-needed -Wl,-rpath,'/pg14/soft/lib',--enable-new-dtags

LDFLAGS_EX =

LDFLAGS_SL =

LIBS = -lpgcommon -lpgport -lssl -lcrypto -lz -lreadline -lpthread -lrt -ldl -lm

 

 

step 4.安装新版数据库14.13

[postgres@localhost ~]$ tar zxvf postgresql-14.13.tar.gz

postgresql-14.13/

postgresql-14.13/.dir-locals.el

postgresql-14.13/contrib/

postgresql-14.13/contrib/tcn/

postgresql-14.13/contrib/tcn/tcn.control

postgresql-14.13/contrib/tcn/Makefile

postgresql-14.13/contrib/tcn/tcn.c

postgresql-14.13/contrib/tcn/tcn--1.0.sql

postgresql-14.13/contrib/sslinfo/

postgresql-14.13/contrib/sslinfo/sslinfo--1.0--1.1.sql

postgresql-14.13/contrib/sslinfo/sslinfo.control

[postgres@localhost ~]$ cd postgresql-14.13/

[postgres@localhost postgresql-14.13]$ ./configure --prefix=/pg1413/soft --with-openssl

checking build system type... x86_64-pc-linux-gnu

checking host system type... x86_64-pc-linux-gnu

checking which template to use... linux

checking whether NLS is wanted... no

checking for default port number... 5432

checking for block size... 8kB

make && make install

【安装报错】

权限被拒绝,安装软件之前忘记创建目录了。

make[2]: Leaving directory `/home/postgres/postgresql-14.13/src/backend/utils'

make[1]: Leaving directory `/home/postgres/postgresql-14.13/src/backend'

make -C src install

make[1]: Entering directory `/home/postgres/postgresql-14.13/src'

make -C common install

make[2]: Entering directory `/home/postgres/postgresql-14.13/src/common'

/bin/mkdir -p '/pg1413/soft/lib'

/bin/mkdir: cannot create directory ‘/pg1413’: Permission denied

make[2]: *** [installdirs] Error 1

make[2]: Leaving directory `/home/postgres/postgresql-14.13/src/common'

make[1]: *** [install-common-recurse] Error 2

make[1]: Leaving directory `/home/postgres/postgresql-14.13/src'

make: *** [install-src-recurse] Error 2

【解决方案】:

使用root创建目录,给权限之后,重新make install一下就可以了。

[root@localhost ~]# mkdir -p /pg1413

[root@localhost ~]# chown -R postgres:postgres /pg1413

[root@localhost ~]#

[postgres@localhost postgresql-14.13]$ make install

/bin/mkdir -p '/pg1413/soft/bin'

/bin/install -c createdb '/pg1413/soft/bin'/createdb

/bin/install -c dropdb '/pg1413/soft/bin'/dropdb

/bin/install -c createuser '/pg1413/soft/bin'/createuser

step 5.关闭源库

pg_ctl stop

[postgres@localhost postgresql-14.13]$ pg_ctl stop

waiting for server to shut down.... done

server stopped

step 6.修改环境变量

[postgres@localhost ~]$ vi .bash_profile

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH

export LANG=en_US.UTF-8

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

export PGPORT=5666

export PGDATA=/dbs/pg14/data -->数据目录不改

export PGHOME=/pg1413/soft -->要改

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

export PATH=/pg1413/soft/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/postgres/.local/bin:/home/postgres/bin:.:/pg1413/pgbouncer/bin -->要改

step 7.使用新版数据库执行文件启动数据库

[postgres@localhost ~]$ pg_ctl start

waiting for server to start....2024-11-27 09:06:41.029 CST [28582] FATAL: could not access file "pg_stat_statements": No such file or directory

2024-11-27 09:06:41.029 CST [28582] LOG: database system is shut down

stopped waiting

pg_ctl: could not start server

Examine the log output.

【原因分析】

旧版本数据库有安装pg_stat_statements模块,新版本没有安装

pg_stat_statements是用来查询运行时间长的SQL语句。

【解决办法】

安装包本身自带这个模块,到安装包里把这个模块安装上,

[postgres@localhost ~]$ cd ~/postgresql-14.13/contrib/pg_stat_statements/

[postgres@localhost pg_stat_statements]$ make & make install

[1] 28630

make -C ../../src/backend generated-headers

make -C ../../src/backend generated-headers

make[1]: Entering directory `/home/postgres/postgresql-14.13/src/backend'

make[1]: Entering directory `/home/postgres/postgresql-14.13/src/backend'

再次启动数据库,继续报错

[postgres@localhost ~]$ pg_ctl start

waiting for server to start....2024-11-27 09:10:41.741 CST [28658] FATAL: could not access file "passwordcheck": No such file or directory

2024-11-27 09:10:41.741 CST [28658] LOG: database system is shut down

stopped waiting

pg_ctl: could not start server

Examine the log output.

【原因分析】

旧版本数据库有配置密码复杂度检查模块,新版本没有安装

【解决办法】

到安装包里把密码复杂度模块安装上。

[postgres@localhost ~]$ cd ~/postgresql-14.13/contrib/passwordcheck/

[postgres@localhost passwordcheck]$

[postgres@localhost passwordcheck]$ make & make install

[1] 28667

make -C ../../src/backend generated-headers

make -C ../../src/backend generated-headers

make[1]: Entering directory `/home/postgres/postgresql-14.11/src/backend'

make -C catalog distprep generated-header-symlinks

make[1]: Entering directory `/home/postgres/postgresql-14.11/src/backend'

[postgres@localhost passwordcheck]$ pg_ctl start

waiting for server to start....2024-11-27 09:12:24.344 CST [28712] FATAL: could not access file "pgaudit": No such file or directory

2024-11-27 09:12:24.344 CST [28712] LOG: database system is shut down

stopped waiting

pg_ctl: could not start server

Examine the log output.

【原因分析】

旧版本数据库有安装审计插件,新版本没有安装

【解决办法】

重新安装审计插件

[postgres@localhost pgaudit-1.6.2]$ cd pgaudit-1.6.2/

-bash: cd: pgaudit-1.6.2/: No such file or directory

[postgres@localhost pgaudit-1.6.2]$

[postgres@localhost pgaudit-1.6.2]$ make USE_PGXS=1

make: Nothing to be done for `all'.

[postgres@localhost pgaudit-1.6.2]$ make install USE_PGXS=1

/bin/mkdir -p '/pg1413/soft/lib/postgresql'

/bin/mkdir -p '/pg1413/soft/share/postgresql/extension'

/bin/mkdir -p '/pg1413/soft/share/postgresql/extension'

/bin/install -c -m 755 pgaudit.so '/pg1413/soft/lib/postgresql/pgaudit.so'

/bin/install -c -m 644 .//pgaudit.control '/pg1413/soft/share/postgresql/extension/'

/bin/install -c -m 644 .//pgaudit--1.6.2.sql .//pgaudit--1.6--1.6.1.sql .//pgaudit--1.6.1--1.6.2.sql '/pg1413/soft/share/postgresql/extension/'

[postgres@localhost pgaudit-1.6.2]$ pg_ctl start

waiting for server to start....2024-11-27 09:13:26.931 CST [28756] LOG: pgaudit extension initialized

2024-11-27 09:13:26.950 CST [28756] LOG: redirecting log output to logging collector process

2024-11-27 09:13:26.950 CST [28756] HINT: Future log output will appear in directory "/pglog".

done

server started

终于启动成功

【关于contrib模块】

PostgreSQL数据库contrib模块是一系列附加的、可选的、由社区开发和维护的扩展功能。这些模块提供了各种额外的功能,例如数据类型、函数、工具、扩展插件等,以满足特定需求或提供特定功能。它们不是核心的数据库系统的一部分,但可以根据需要安装和使用。

一些常见的contrib模块包括:

1、pg_stat_statements是最有用的扩展。它记录了运行了哪些查询、查询花费了多长时间以及有关查询的许多其他详细信息。这是管理数据库性能的关键扩展。

2、auto_explain是 contrib 中另一个有助于提高性能的插件。对于运行时间超过一定期限的查询,将自动记录解释计划——有助于性能调试。

3、pgcrypto:提供了加密功能,包括对称加密、哈希函数和数字签名等。

这些扩展模块允许用户根据自己的需求和特定的数据库应用场景来扩展和定制PostgreSQL。安装并启用这些模块可以为数据库提供额外的功能和灵活性。

contrib模块作为PostgreSQL的一个功能模块,可以在下载的安装包里找到这个模块,比如,如下显示为PostgreSQL 14.13版本contrib模块的相关内容,具体如下所示:

进入contrib模块目录后,可以看到很多的文件夹,每一个文件夹就代表一个用户定义模块,里面可能包含一个或者多个用户定义的函数。

比如选择contrib模块dblink这个目录,可以看到里面含有一些.sql、.c和.conf等文件。

[postgres@localhost dblink]$ more dblink--1.0--1.1.sql

/* contrib/dblink/dblink--1.0--1.1.sql */

-- complain if script is sourced in psql, rather than via ALTER EXTENSION

\echo Use "ALTER EXTENSION dblink UPDATE TO '1.1'" to load this file. \quit

CREATE FUNCTION dblink_fdw_validator(

options text[],

catalog oid

)

RETURNS void

AS 'MODULE_PATHNAME', 'dblink_fdw_validator'

LANGUAGE C STRICT;

CREATE FOREIGN DATA WRAPPER dblink_fdw VALIDATOR dblink_fdw_validator;

上面这段代码的具体作用就是用于升级 dblink 扩展到 1.1 版本,并创建了用于验证外部数据封装器的函数和相关配置。

从上面图可以看到目录下含有一些C语言代码文件,PostgreSQL是使用C语言编写的,而C语言代码在调用底层硬件方面具有天然的优势,这也是PostgreSQL相对其它一些语言代码开发的数据库的优势所在。

在https://pgpedia.info/c/contrib-module.html这篇文章里,对contrib模块有比较详细的解释,我将这段英文内容翻译成中文如下:

contrib 模块是作为源代码分发的附加功能,但默认情况下未启用的。它们通常提供作为扩展模块或额外的客户端或服务器应用程序。它们是核心分发的一部分,但默认情况下未启用,因为它们要么提供特定的功能,要么被视为实验性质的,或者在某些情况下被用于提供已整合到 PostgreSQL 核心的功能的向后兼容性。

将 PostgreSQL 作为软件包提供的操作系统通常会提供 contrib 模块作为子软件包,通常称为 “postgresql-contrib” 或类似的名称。contrib 模块的源代码可以在 PostgreSQL 源代码分发的 “contrib/” 目录中找到。除非使用 “make world” 目标,否则不会自动构建任何 contrib 模块,在这种情况下将构建所有 contrib 模块。在 “contrib/” 目录中运行 “make && make install” 也将导致构建所有模块。

另外随着PostgreSQL版本的不断迭代,不同版本所含的contrib模块在兼容性上也有差别,以下是这幅图也是来自https://pgpedia.info/c/contrib-module.html对不同PostGreSQL版本contrib模块兼容性差异的对比。

IMG_256

IMG_256

在https://www.mankier.com/package/postgresql-contrib这篇文章中,对于部分PostGreSQL的一些contrib 模块的组件也有相应的解释,我将原文翻译成中文,内容如下:

常用命令

oid2name: 解析 PostgreSQL 数据目录中的 OID 和文件节点

pg_amcheck: 检查一个或多个 PostgreSQL 数据库的损坏情况

pg_archivecleanup: 清理 PostgreSQL WAL(写前日志)归档文件

pg_recvlogical: 控制 PostgreSQL 逻辑解码流

pg_test_fsync: 确定 PostgreSQL 的最快的 wal_sync_method

pg_test_timing: 测量时间开销

pg_waldump: 显示 PostgreSQL 数据库集群的写前日志的可读版本

pgbench: 在 PostgreSQL 上运行基准测试

vacuumlo: 从 PostgreSQL 数据库中删除孤立的大对象

如果希望详细了解contrib模块里各用户定义模块的具体含义,可以仔细阅读github上https://github.com/postgres/postgres/tree/master/contrib这部分对各模块的详细介绍,不过这需要很强的代码阅读能力,对于初学者来说确实是一个很大的挑战。

那有没有办法提前知道旧版本数据库安装了哪些插件?

postgres=# SELECT * FROM pg_extension;

postgres=# \dx

postgres=# SELECT * FROM pg_available_extensions;

postgres=# show shared_preload_libraries;

step8.登录数据库查看版本,验证数据

验证版本:

[postgres@localhost pgaudit-1.6.2]$ pg_ctl -V

pg_ctl (PostgreSQL) 14.13

[postgres@localhost pgaudit-1.6.2]$ psql

psql (14.13)

Type "help" for help.

postgres=# select version();

version

----------------------------------------------------------------------------------------------------------

PostgreSQL 14.13 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit

(1 row)

验证数据:

postgres=# select * from test;

id | name

----+------

1 | a

(1 row)

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

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

相关文章

HarmonyOS开发笔记2

应用基本信息 我们先来看下harmony的工程结构中的文件主要涉及以下几个目录AppScope > app.json5:应用的全局配置信息,详见app.json5配置文件。 entry:HarmonyOS工程模块,编译构建生成一个HAP包。src > main > ets:用于存放ArkTS源码。 src > main > ets &…

CAN收发器 – TJA1050(高速CAN)

芯片内部电路引脚定义:VCC:5V TX、RX:与设备的CAN控制器相连 Vref:参考电平输出 S:选择输入是高速模式或者静默模式ps:Vref和S可不接

常见的几款电脑桌面好用的便签备忘录推荐

1、系统自带便笺 Windows系统自带有便笺(sticky notes),打开即可使用,可记录简单的文字、图片,也可以列清单。 但是不支持设置提醒时间,无法一直悬挂在桌面上显示,实时同步到手机端操作很麻烦。 仅在电脑上简单记事,用它足够了!2、敬业签 界面可以一直悬挂在桌面上置顶…

【java开发】使用Launch4j将Web应用的Jar包打包成exe

如果当你在工作中使用Java比较多,有时会碰到将Jar包打包成exe部署在客户电脑上的需求。经过一顿操作猛如虎的网上搜索,最后技术选型选择了Launch4j,就图它开源免费、上手简单。 Launch4j 是一个跨平台工具,用于将以 JAR 文件分发的 Java 应用程序封装为轻量级的 Windows 原…

modbus通讯协议

一.modbus的四种传输协议: Modbus RTU:使用二进制格式进行数据传输,通讯效率更高. Modbus ASCII使用ASCII码进行数据传输,可读性好,但通讯效率更低. Modbus TCP/IP是基于以太网的一种通讯方式,它将Modbus协议封装在TCP/IP协议栈中,通过以太网传输数据。具有高速、稳定的特…

简单搭建一个小型拓扑,练习路由器的Esay IP的设置

内网用户需要访问外网时,可以通过配置NAT,实现IP数据报标头IP的替换。 本条博客是NAT转换的具体实现方式,由华为官方文档摘录Esay IP的实现。1. cloud云的配置 增加两个Ethernet端口,添加到端口映射表2.路由器的配置# 进入系统视图 <Huawei>system-view # 查看简洁的…

使用 Pyinstaller 打包为 windows exe程序 添加管理员权限的多种方式

使用 Pyinstaller 打包为 windows exe程序 添加管理员权限的多种方式 本文提供几种在使用 Pyinstaller打包后,为包体 exe提升管理员权限的方式。 注意事项: 管理员权限的必要性:确保程序确实需要管理员权限,否则用户可能会质疑程序的安全性。 数字签名:最好对生成的 .exe …

DSPf28335-时钟及控制系统

外部晶振30Mhz,经过十倍频与二分频得到150Mhz系统时钟系统时钟在供给外设,为不同的外设提供不同的时钟频率,进行不同程度的分频分别供给SPI-A,SCI-A;I2C-A;eCAN-A/B;ePWM;eCAP等外设进行系统控制;

【嵌入式开发】log.c:一个非常轻量的嵌入式日志库

log.c简介github链接: https://github.com/rxi/log.clog.c是一个轻量级的日志库。一个用 C99 实现的简单日志库,这意味着它应该可以在任何支持 C99 标准的平台上编译和运行,如我们的嵌入式系统中。 特点: 使用C99标准,适用于嵌入式。 支持静默模式。 支持日志级别设置。 支…

Day1.了解MarkDown

Markdown学习 标题 三级 四级 +空格+文字=标题 几个#就是几级标题 字体 Hello World! 两边各一个*,斜体 Hello World! 两边各两个*,加粗 Hello World! 两边各三个*,斜体+加粗 Hello World! 两边各两个~~,划去 引用每天学一点,早晚成大佬。 一个箭头符号<或>分割…

kubectl 命令行快速操作

集群安装完成后,查看集群信息 [root@k8s-master1 images]# kubectl version [root@k8s-master1 images]# kubectl cluster-info[root@k8s-master1 images]# kubectl version Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"…

vxe-table grid 分享实现单元格编辑表格表尾合计实时计算

在使用 vxe-grid 时,需要实现表尾合计功能,通过单元格编辑之后,实时自动计算表尾合计的值,自动更新表尾合计数据,实现方式通过监听change 事件,从而实现实时更新合计功能。 官网:https://vxetable.cn可以使用插槽模板,也可以使用配置式,下面是配置式的用法: <temp…