前情回顾
前文 从 PostgreSQL 升级至 IvorySQL 4.0 介绍了如何从 PG 12 升级到 IvorySQL 4,以及跨大版本升级的注意事项。本文将演示如何从 IvorySQL 4.0 升级到 IvorySQL 4.2。
IvorySQL 是基于 PostgreSQL 的开源数据库,在 PostgreSQL 17.1 这个小版本中出现了扩展兼容性问题,在 17.1 发布一周后紧急发布了 17.2 小版本。所以,IvorySQL 跳过 4.1 版本,于 2025 年 1 月 13 日发布了 IvorySQL 4.2,IvorySQL 4.2 包含了 PostgreSQL 17.1 和 17.2 的变更,并修复了 IvorySQL 4.0 的三个小问题。
插播新闻:PostgreSQL 喜提五冠王
DB-Engines 宣布 PostgreSQL 成为 2024 年度最佳 DBMS。
消息来源:https://db-engines.com/en/blog_post/109
2025 年一定要学好 PostgreSQL。
IvorySQL 4.2 版本概览
从 IvorySQL 4.0 升级到 IvorySQL 4.2,我们需要先关注功能增强和问题修复。
需要注意的是,如果你曾经从具有对另一个分区表的外键引用的分区表中分离分区,并且没有删除前一个分区,那么你可能需要修复目录或数据损坏。此外,在数据库的 LC_CTYPE
设置为 C
而其 LC_COLLATE
设置为其他语言环境的罕见情况下,应该重新索引文本列上的索引。
增强功能及问题修复
PostgreSQL 17.1 (2024-11-14)
- 确保在行级安全性 (RLS) 适用于非顶层表引用时,将缓存的计划标记为依赖于调用角色。(CVE-2024-10976)
- 使 libpq 丢弃在 SSL 或 GSS 协议协商期间接收到的错误消息。(CVE-2024-10977)
- 修复
SET SESSION AUTHORIZATION
和SET ROLE
之间的非预期交互。(CVE-2024-10978) - 防止受信任的 PL/Perl 代码更改环境变量。(CVE-2024-10979)
- 修复在附加或分离表分区时,外键约束的目录状态更新问题。
用于识别损坏的约束并构建重新创建它们所需的语句:
SELECT conrelid::pg_catalog.regclass AS "constrained table", conname AS constraint, confrelid::pg_catalog.regclass AS "references", pg_catalog.format('ALTER TABLE %s DROP CONSTRAINT %I;', conrelid::pg_catalog.regclass, conname) AS "drop", pg_catalog.format('ALTER TABLE %s ADD CONSTRAINT %I %s;', conrelid::pg_catalog.regclass, conname, pg_catalog.pg_get_constraintdef(oid)) AS "add" FROM pg_catalog.pg_constraint c WHERE contype = 'f' AND conparentid = 0 AND (SELECT count(*) FROM pg_catalog.pg_constraint c2 WHERE c2.conparentid = c.oid) <> (SELECT count(*) FROM pg_catalog.pg_inherits i WHERE (i.inhparent = c.conrelid OR i.inhparent = c.confrelid) AND EXISTS (SELECT 1 FROM pg_catalog.pg_partitioned_table WHERE partrelid = i.inhparent));
复制
更多细节,请参阅 PostgreSQL 发布说明 https://www.postgresql.org/docs/release/17.1/
PostgreSQL 17.2 (2024-11-21)
- 修复与结构体
ResultRelInfo
一起工作的扩展的 ABI 兼容性问题。 - 恢复
ALTER {ROLE|DATABASE} SET role
的功能。 - 修复逻辑复制槽的
restart_lsn
可能倒退的情况。 - 避免在执行 pg_rewind 时删除仍然需要的 WAL 文件。
- 修复与删除共享统计信息条目相关的竞态条件问题。
更多细节,请参阅 PostgreSQL 发布说明 https://www.postgresql.org/docs/release/17.2/
IvorySQL 4.2
- 修复 pg_upgrade 的问题: #721
- 提供 Rocky9 安装包: #724
- 修复 IvorySQL 文档中的英文语法错误: #95
升级 IvorySQL
IvorySQL 4.x 小版本升级不需要导出、导入数据,也可以不使用 pg_upgrade 工具,直接安装新二进制包即可。不过在升级之前,你需要确认已经阅读上述内容。
查看当前运行的 IvorySQL 版本。
[ivorysql@rl9 ~]$ psql -c 'select version()' version ------------------------------------------------------------------------------------------------------------------------- PostgreSQL 17.0 (IvorySQL 4.0) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.5.0 20240719 (Red Hat 11.5.0-2), 64-bit (1 row)
复制
下载 IvorySQL 4.2 安装包,并上传到服务器。
[shawnyan@rl9 ivorysql42]$ ll -h total 53M -rw-r--r-- 1 shawnyan shawnyan 3.1M Jan 15 20:38 ivorysql4-4.2-1.rhel9.x86_64.rpm -rw-r--r-- 1 shawnyan shawnyan 4.9M Jan 15 20:38 ivorysql4-contrib-4.2-1.rhel9.x86_64.rpm -rw-r--r-- 1 shawnyan shawnyan 6.5M Jan 15 20:38 ivorysql4-devel-4.2-1.rhel9.x86_64.rpm -rw-r--r-- 1 shawnyan shawnyan 1.9M Jan 15 20:38 ivorysql4-docs-4.2-1.rhel9.x86_64.rpm -rw-r--r-- 1 shawnyan shawnyan 1.5M Jan 15 20:38 ivorysql4-libs-4.2-1.rhel9.x86_64.rpm -rw-r--r-- 1 shawnyan shawnyan 11M Jan 15 20:38 ivorysql4-llvmjit-4.2-1.rhel9.x86_64.rpm -rw-r--r-- 1 shawnyan shawnyan 235K Jan 15 20:38 ivorysql4-plperl-4.2-1.rhel9.x86_64.rpm -rw-r--r-- 1 shawnyan shawnyan 266K Jan 15 20:38 ivorysql4-plpython3-4.2-1.rhel9.x86_64.rpm -rw-r--r-- 1 shawnyan shawnyan 122K Jan 15 20:38 ivorysql4-pltcl-4.2-1.rhel9.x86_64.rpm -rw-r--r-- 1 shawnyan shawnyan 25M Jan 15 20:38 ivorysql4-server-4.2-1.rhel9.x86_64.rpm
复制
使用 dnf 命令升级 IvorySQL 数据库。
[shawnyan@rl9 ivorysql42]$ sudo dnf upgrade ./ivorysql4-* Last metadata expiration check: 0:15:38 ago on Wed 15 Jan 2025 08:29:53 PM CST. Dependencies resolved. =============================================================================================== Package Architecture Version Repository Size =============================================================================================== Upgrading: ivorysql4 x86_64 4.2-1.rhel9 @commandline 3.1 M ivorysql4-contrib x86_64 4.2-1.rhel9 @commandline 4.9 M ivorysql4-devel x86_64 4.2-1.rhel9 @commandline 6.5 M ivorysql4-docs x86_64 4.2-1.rhel9 @commandline 1.9 M ivorysql4-libs x86_64 4.2-1.rhel9 @commandline 1.5 M ivorysql4-llvmjit x86_64 4.2-1.rhel9 @commandline 11 M ivorysql4-plperl x86_64 4.2-1.rhel9 @commandline 234 k ivorysql4-plpython3 x86_64 4.2-1.rhel9 @commandline 266 k ivorysql4-pltcl x86_64 4.2-1.rhel9 @commandline 121 k ivorysql4-server x86_64 4.2-1.rhel9 @commandline 24 M Transaction Summary =============================================================================================== Upgrade 10 Packages ... Upgraded: ivorysql4-4.2-1.rhel9.x86_64 ivorysql4-contrib-4.2-1.rhel9.x86_64 ivorysql4-devel-4.2-1.rhel9.x86_64 ivorysql4-docs-4.2-1.rhel9.x86_64 ivorysql4-libs-4.2-1.rhel9.x86_64 ivorysql4-llvmjit-4.2-1.rhel9.x86_64 ivorysql4-plperl-4.2-1.rhel9.x86_64 ivorysql4-plpython3-4.2-1.rhel9.x86_64 ivorysql4-pltcl-4.2-1.rhel9.x86_64 ivorysql4-server-4.2-1.rhel9.x86_64 Complete!
复制
注意:升级时,将覆盖 .bash_profile
文件,如果该文件中包含自定义内容,建议升级前先备份该文件。
拉起 IvorySQL 数据库,检查确认版本为 IvorySQL 4.2。
[ivorysql@rl9 ~]$ psql -c 'select version()' version ------------------------------------------------------------------------------------------------------------------------- PostgreSQL 17.2 (IvorySQL 4.2) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.5.0 20240719 (Red Hat 11.5.0-2), 64-bit (1 row)
复制
检查测试表、数据,确认正常。
到此,IvorySQL 升级完成。
这里还有一个小插曲,其实 IvorySQL 项目提供了 YUM 仓库,这两天不太稳定,但从 GitHub 下载安装包又不是非常方便,建议增加其他渠道的镜像,便于推广使用。
Have a nice day ~
🌻 往期精彩 ▼
- 「合集」三年 50 篇,TiDB 干货全收录
- 「合集」MySQL 8.x 系列文章汇总
- 如何选择适合的 MySQL Connector/J 版本
- 几张图带你了解 TiDB 架构演进
- 一文带你了解 GB 18030-2022 字符集
- 人大金仓 更名为 中电科金仓
- 一文带你了解 KING BASE 金仓数据库
- 即将告别 PG 12,建议升级到 PG 16.3 版本
- Oracle 数据库全面升级为 23ai
- 一文带你了解 Oracle 23ai 新特性 Vector 的基础用法
- 国产分布式数据库开启新篇章!详解安全可靠测评结果公告(2024年第2号)
- MySQL 扛不住了,来试试这款平替的“国产化改造”必入手的国产数据库吧!
- 广东的崖山,中国的崖山数据库
- TiDB 新朋友 DBdoctor
– / END / –
👉 这里可以找到我
👉 这里有得聊
如果对国产基础软件(操作系统、数据库、中间件)感兴趣,可以加群一起聊聊。
关注微信公众号:少安事务所,后台回复[群],即可看到入口。
如果这篇文章为你带来了灵感或启发,就请帮忙点『赞』or『在看』or『转发』吧,感谢!ღ( ´・ᴗ・` )~