【PG16】后 EL 7 时代,PG 16 如何在 CentOS 7 上运行

news2024/11/19 15:30:44

↑ 关注“少安事务所”公众号,欢迎⭐收藏,不错过精彩内容~

本文写于 2023-09-29

PostgreSQL 16 Released

9/14, PostgreSQL 16 正式发布。从发布公告^1 和 Release Notes^2 可以看到 PG16 包含了诸多新特性和增强改进。

  1. 性能提升,查询计划支持并行 FULLRIGHT 关联。 ^3
  2. 逻辑复制,支持从 standby 服务器进行复制,支持订阅者并行应用大事务,新增预定义角色 pg_create_subscription。 ^4
  3. 开发体验,增加了 SQL/JSON 构造函数 ( JSON_ARRAY(), JSON_ARRAYAGG())和恒等函数 ( IS JSON)。 ^5
  4. 监控增强,增加 pg_stat_io 视图,以支持监控 I/O 统计数据。 ^6

CentOS 7 上 RPM 安装 PG16 (EOL)

一般情况下,在 CentOS 7 系统上安装 PostgreSQL 只需要两条 yum/dnf 命令即可。

sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install -y postgresql16-server

但是从 PostgreSQL 16 开始,这种安装方式在 CentOS 7 上已经被停用,所以执行上面两条命令会看到下面的输出。

No package postgresql16-server available.
Error: Nothing to do

从 yum 仓库^7 也只能找到 rhel 8/9 的 postgresql16 rpm 包,并没有 rhel 7。

其实相关信息 9 月初已在官方网站上发布了公告^8,或许只是注意到的人并不多。

EOL announcement for RHEL 7

PostgreSQL RPM repo stopped adding new packages to the PostgreSQL RPM repo as of Aug 2023, including PostgreSQL 16.

We will maintain older major releases until each major release is EOLed by PostgreSQL project. Please visit here for latest release dates for each major release.

If you have any questions, please either email to pgsql-pkg-yum@lists.postgresql.org, or create a ticket at our redmine.

那么,仍在使用 CentOS 7 的环境如何安装、升级 PostgreSQL 16 呢?

Docker 运行 PG16(容易)

PostgreSQL 的官方 Docker 镜像由 the PostgreSQL Docker Community ^9 维护,提供了 4 个 PG16 的镜像,分别基于 Debian bullseye / Debian Bookworm / alpine3.17 / alpine3.18 。

演示步骤如下:

  1. 主机的操作系统为 CentOS 7。
$ hostnamectl
   Static hostname: centos7.shawnyan.cn
...
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-1160.92.1.el7.x86_64
      Architecture: x86-64
  1. 拉取 PG16 的 Docker 镜像。
[shawnyan@centos7 ~]$ docker pull postgres:16
16: Pulling from library/postgres
a803e7c4b030: Pull complete
5cf7cbd17f32: Pull complete
ddc24c6f1e18: Pull complete
2b0f4d94850a: Pull complete
fccb5b7554d1: Pull complete
1dd940c0e742: Pull complete
f641e2497276: Pull complete
9c05395a8e66: Pull complete
285e24d225ac: Pull complete
3faa43a5d9fc: Pull complete
482fc7a6b0f4: Pull complete
29ca5fe1b2a4: Pull complete
d3012096b6ce: Pull complete
Digest: sha256:379b7a1223b394106cc20d18a5177ed77738003416057e8898cde10e6b7a082a
Status: Downloaded newer image for postgres:16
docker.io/library/postgres:16

[shawnyan@centos7 ~]$ docker images postgres
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
postgres     16        ec7f99c50d3c   8 days ago   418MB
  1. 启动 PG16 容器。
[shawnyan@centos7 ~]$ docker run --name pg16 -e POSTGRES_HOST_AUTH_METHOD=trust -d postgres:16
e3bb74e44107d349f8a2c4a0f9ac9cb3aa4ac26e66bb930069b37c563cc815dd
[shawnyan@centos7 ~]$ docker ps
CONTAINER ID   IMAGE                COMMAND                  CREATED         STATUS        PORTS                                       NAMES
e3bb74e44107   postgres:16          "docker-entrypoint.s…"   2 seconds ago   Up 1 second   5432/tcp                                    pg16

这里需要注意的是,需要指定超管用户的密码,或者允许所有连接没有密码登陆,否则容器会启动失败。

[shawnyan@centos7 ~]$ docker logs pg16
Error: Database is uninitialized and superuser password is not specified.
       You must specify POSTGRES_PASSWORD to a non-empty value for the
       superuser. For example, "-e POSTGRES_PASSWORD=password" on "docker run".

       You may also use "POSTGRES_HOST_AUTH_METHOD=trust" to allow all
       connections without a password. This is *not* recommended.

       See PostgreSQL documentation about "trust":
       https://www.postgresql.org/docs/current/auth-trust.html
  1. 连接 PG16。

通过 psql 连接 PG16,并查看版本信息。

[shawnyan@centos7 ~]$ docker exec -it pg16 psql -U postgres
psql (16.0 (Debian 16.0-1.pgdg120+1))
Type "help" for help.

postgres=# select version();
                                                       version
---------------------------------------------------------------------------------------------------------------------
 PostgreSQL 16.0 (Debian 16.0-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
(1 row)

postgres=# select 'Hi, PG16~';
 ?column?
-----------
 Hi, PG16~
(1 row)

在 CentOS 7 上编译 PG16 源码(进阶)

PG16 在 CentOS 7 上的源码编译步骤与 PG15 类似 。

  1. 下载 PG16 的源码,并进行编译、安装。
wget https://mirrors.neusoft.edu.cn/postgresql/source/v16.0/postgresql-16.0.tar.gz
tar zxf postgresql-16.0.tar.gz
cd postgresql-16.0/
./configure --prefix=/opt/postgresql --with-extra-version="-ShawnYan"
make -j $(nproc) world
make install-world
  1. 初始化 PG16。
$ initdb --pgdata="$PGDATA"
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.UTF-8".
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 /data/pg16/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Tokyo
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

initdb: warning: enabling "trust" authentication for local connections
initdb: hint: 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 /data/pg16/data -l logfile start

  1. 启动 PG16。
$ pg_ctl -D /data/pg16/data -l logfile start
waiting for server to start.... done
server started
  1. 查看版本信息。
$ psql
psql (16.0-ShawnYan)
Type "help" for help.

postgres=# select version();
                                                     version
------------------------------------------------------------------------------------------------------------------
 PostgreSQL 16.0-ShawnYan on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
(1 row)

到此,PG16 已在 CentOS 7 上安装完成。

总结

CentOS 7 的时代即将结束,将来如何选择操作系统,是选用 Redhat、Rocky Linux、Ubuntu,还是云厂商的 Linux ?

或许,在考虑升级 PG 版本的同时,也是时候该考虑一下 OS 的版本了。

🌻 往期精彩 ▼

  • 从 PG 技术峰会南京站汲取的那些干货
  • PG 扩展推荐:pgpasswd & PG 密碼長度
  • 即将告别PG 12,建议升级到PG 16.3版本
  • PG Style! 盘点几个常用的 Postgres 环境变量

-- / END / --

alt

如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!(๑˃̵ᴗ˂̵)

本文由 mdnice 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ssm超市管理系统java超市进销存管理系统jsp项目

文章目录 超市进销存管理系统一、项目演示二、项目介绍三、系统部分功能截图四、七千字项目文档五、部分代码展示六、底部获取项目源码和七千字项目文档(9.9¥带走) 超市进销存管理系统 一、项目演示 超市进销存管理系统 二、项目介绍 角色分…

Dynadot API调整一览

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

算法设计第七周(应用哈夫曼算法解决文件归并问题)

一、【实验目的】 (1)进一步理解贪心法的设计思想 (2)掌握哈夫曼算法的具体应用 (3)比较不同的文件归并策略,探讨最优算法。 二、【实验内容】 设S{f1,…,fn}是一组不同的长度的有序文件构…

vue脚手架与创建vue项目

一、前言 vue脚手架的安装与创建vue项目需要先行安装配置node与npm,详情可以看node、npm的下载、安装、配置_node 下载安装-CSDN博客 二、vue脚手架的使用 1、vue与vue脚手架的版本 Vue脚手架(Vue CLI)是Vue.js官方提供的一个命令行工具&…

打乱一维数组中数据(小练习)

int[] tempArr{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 要求:打乱一维数组的数据,并按照4个一组的方式添加到二维数组中。 package chengyu4; import java.util.Random; public class Test{public static void main(String args[]) {int[] temArr {1…

CM2038A 3W 双通道立体声音频功率放大器芯片IC

功能说明: CM2038A是一双路音频功率放大器,它能够在5V 电源电压下给一个4Ω负载提供THD小于10%、最大平均值为3W的输出功率。另外,在驱动立体声耳机时耳机输入引脚可以使放 大器工作在单边模式。 CM2038A是为提供高保真音频输出而专门设计…

【每日一坑】KiCAD 覆铜区域约束

【每日一坑】 1.螺丝孔周围不想要要铜皮; 2、首先在CTRLshiftK;画一个区域,比如铺一个GND; 3、选择CUTOUT; 4、画线,画好闭合图形;如下图 5、就是这样了,就是还没有画圆或者异形的;

如何制定一个有效的现货黄金投资策略(EEtrade)

制定一个有效的现货黄金投资策略涉及多方面的考量。以下是几个步骤和考虑因素,可以帮助您建立一个坚实的投资策略: 1. 设立清晰的投资目标 决定您投资现货黄金的主要目的。是否是为了短期利润,长期保值增值,还是为了投资组合的多…

如何通过网络性能监控和流量回溯分析提升网络效率?

目录 网络性能监控的重要性 什么是网络性能监控? 为什么需要网络性能监控? 流量回溯分析的应用 什么是流量回溯分析? 流量回溯分析的优势 实现网络性能监控和流量回溯分析的方法 使用高性能的分析工具 部署网络监控系统 结论 在当今…

Windows内核函数 - 创建关闭注册表

在驱动程序的开发中,经常会用到对注册表的操作。与Win32的API不同,DDK提供另外一套对注册表操作的相关函数。首先明确一下注册表里的几个概念,避免在后面混淆。 图1 注册表概念 有5个概念需要重申一下: * 注册表项: 注…

关于c++的通过cin.get()维持黑框的思考

1.前言 由于本科没有学过c语言,研究生阶段接触c上手有点困难,今天遇到关于通过cin.get()来让黑框维持的原因。 2.思考 cin.get()维持黑框不消失的原因一言蔽之就是等待输入。等待键盘的输入内容并回车(一般是回车)后cin.get()才…

2024下半年BRC-20铭文发展趋势预测分析

自区块链技术诞生以来,其应用场景不断扩展,代币标准也在不断演进。BRC-20铭文作为基于比特币区块链的代币标准,自其推出以来,因其安全性和去中心化特性,受到了广泛关注和使用。随着区块链技术和市场环境的不断变化&…

NFTScan 正式上线 Mint NFTScan 浏览器和 NFT API 数据服务

2024 年 5 月 20 号,NFTScan 团队正式对外发布了 Mint NFTScan 浏览器,将为 Mint 生态的 NFT 开发者和用户提供简洁高效的 NFT 数据搜索查询服务。NFTScan 作为全球领先的 NFT 数据基础设施服务商,Mint 是继 Bitcoin、Ethereum、BNBChain、Po…

maven聚合工程整合springboot+mybatisplus遇到的问题

前言(可以直接跳过看下面解决方法) 项目结构 两个module: yema-terminal-boot 是springboot项目,子包有:controller、service、dao 等等。属于经典三层架构。那么,该module可以理解为是一个单体项目&…

python打造自定义汽车模块:从设计到组装的全过程

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言 二、定义汽车模块与核心类 三、模拟汽车组装过程 四、抽象与封装 五、完整汽车…

液氮罐内部会污染吗

液氮罐是一种常见的存储液态氮的设备,广泛应用于科研、生物医药、食品冷冻等领域。但是,人们对于液氮罐内部是否会产生污染一直存在疑问。 我们来看液氮罐内部可能的污染源。液氮罐内部主要存在以下几种潜在的污染来源:气体污染、杂质污染、…

飞睿智能高精度、低功耗测距,无线室内定位UWB芯片如何改变智能家居

在数字化和智能化快速发展的今天,定位技术已经成为我们日常生活中不可或缺的一部分。然而,传统的GPS定位技术在室内环境中往往束手无策,给我们的生活带来了诸多不便。幸运的是,随着科技的不断进步,一种名为UWB&#xf…

Octo:伯克利开源机器人开发框架

【摘要】在各种机器人数据集上预先训练的大型策略有可能改变机器人学习:这种通用机器人策略无需从头开始训练新策略,只需使用少量领域内数据即可进行微调,但具有广泛的泛化能力。然而,为了广泛应用于各种机器人学习场景、环境和任…

FM1800隧道广播插播控制器

隧道广播插播控制器是一款群载波&应急广播插播控制器采用SDR软件无线电技术,产生独立的插播信号与“群载波”信号,本设备可通过软件无线电技术将音频信号调制成调频载波或“群载波”信号,分别送入插播主机,实现隧道广播远端机…

uart_tty_驱动程序框架

UART子系统(四) TTY驱动程序框架_tty驱动框架-CSDN博客