从 PostgreSQL 升级至 IvorySQL 4.0
> 本文作者:颜少安,IvorySQL 贡献者。 > 本文为授权转载。
2024 年 8 月,我在《PG 12 即将退役,建议升级到 16.4》一文中提到,PostgreSQL 12 版本即将“停运”。而后,2024 年 11 月,PostgreSQL 12.22 发布,这也是 PG 12 最后一个小版本,标志着这个版本的生命周期即将结束。建议升级到更高版本,比如 IvorySQL 4.0。
近期,基于 PostgreSQL 17 的《IvorySQL 4.0 正式发布》,为用户带来了更多新特性和性能提升,并继续增强 Oracle 兼容性。
IvorySQL 项目紧跟 PostgreSQL 的发布节奏,计划每季度发布一个最新内核的小版本。
2025 年发布路线图如下:
- 2025 年第一季度发布 v4.2(PG 内核 17.2),支持多 CPU 架构和操作系统,添加架构设计相关文档。
- 2025 年第二季度发布 v4.3(PG 内核 17.3),Oracle 模式兼容自增列,IvorySQL Operator 内核升级。
- 2025 年第三季度发布 v4.4(PG 内核 17.4),IvorySQL Cloud v4。
- 2025 年第四季度发布 v5.0(PG 内核 18.0),Oracle 模式兼容 rowid。
在未来的版本规划中,IvorySQL 或将支持 MySQL 模式。
本文将详细演示如何在 Rocky Linux 9 系统上安装 IvorySQL 4.0,以及将 PostgreSQL 12.22 中的数据迁移到 IvorySQL 4.0 的步骤和注意事项,为需要完成数据库升级和迁移的用户提供一些参考。
升级方案
在进行数据库升级时,通常有以下两种常见的跨大版本升级方案:
新建数据库
在新环境(包括但不限于主机硬件、操作系统)新建数据库,通过导入导出工具 pg_dumpall
或 ETL/CDC 迁移工具将数据从现有环境迁移到新环境。这种方法的优点是可以在不影响现有业务的情况下进行升级,风险相对较低。缺点是需要额外的硬件和网络资源来搭建新环境。此外,迁移完成后还需要对新环境进行一系列的配置和优化,以确保其能够满足业务需求。
原地升级
在现有环境通过 pg_upgrade
工具进行原地升级,只升级数据库版本,不考虑服务器硬件和操作系统的升级。这种方法的优点是不需要额外的硬件资源,升级过程相对简单。缺点是升级过程中可能会对现有业务造成一定的影响,存在一定的风险。此外,原地升级对数据库版本的兼容性要求较高,如果新旧版本之间的差异较大,可能会出现一些兼容性问题。
在选择升级方案时,可以从这几个角度方面进行考虑和对比:数据库数据量大小,对应用停机时间的影响,新版本数据库是否支持现、新软硬件环境,对人员的技能要求和成本控制。
安装 IvorySQL 4.0
在前文 IvorySQL 4.0 新增支持 Ubuntu 系统中介绍了如何在 Ubuntu 系统安装 IvorySQL 4.0,本小节将演示如何在 Rocky Linux 9 系统安装 IvorySQL 4.0 数据库。
Rocky Linux 是 Red Hat Enterprise Linux 的开源兼容版本,具有良好的稳定性和兼容性。在之前的文章《在 Rocky9 上安装 PostgreSQL15 的五种方法》中介绍过在 Rocky Linux 系统上安装 PostgreSQL 数据库有几种方法,当然这些方法同样适用于 IvorySQL。在安装 IvorySQL 之前,需要确认操作系统的版本和内核版本,确保其满足 IvorySQL 的安装要求。
[shawnyan@rl9 ~]$ hostnamectl Static hostname: rl9.shawnyan.cn Operating System: Rocky Linux 9.5 (Blue Onyx) Kernel: Linux 5.14.0-503.15.1.el9_5.x86_64 Architecture: x86-64 [shawnyan@rl9 ~]$
IvorySQL 数据库的本地安装方式通常包括:YUM/DNF 源安装、RPM 安装、源码安装、Docker 安装。
接下来以 RPM 安装为例,进行演示。
- 下载 RPM 包并上传至服务器。
[shawnyan@rl9 ivorysql4]$ ll -h total 53M -rw-r--r-- 1 shawnyan shawnyan 3.1M Jan 9 02:07 ivorysql4-4.0-1.rhel9.x86_64.rpm -rw-r--r-- 1 shawnyan shawnyan 4.9M Jan 9 02:07 ivorysql4-contrib-4.0-1.rhel9.x86_64.rpm -rw-r--r-- 1 shawnyan shawnyan 6.5M Jan 9 02:07 ivorysql4-devel-4.0-1.rhel9.x86_64.rpm -rw-r--r-- 1 shawnyan shawnyan 1.9M Jan 9 02:07 ivorysql4-docs-4.0-1.rhel9.x86_64.rpm -rw-r--r-- 1 shawnyan shawnyan 1.5M Jan 9 02:07 ivorysql4-libs-4.0-1.rhel9.x86_64.rpm -rw-r--r-- 1 shawnyan shawnyan 11M Jan 9 02:07 ivorysql4-llvmjit-4.0-1.rhel9.x86_64.rpm -rw-r--r-- 1 shawnyan shawnyan 235K Jan 9 02:07 ivorysql4-plperl-4.0-1.rhel9.x86_64.rpm -rw-r--r-- 1 shawnyan shawnyan 267K Jan 9 02:07 ivorysql4-plpython3-4.0-1.rhel9.x86_64.rpm -rw-r--r-- 1 shawnyan shawnyan 121K Jan 9 02:07 ivorysql4-pltcl-4.0-1.rhel9.x86_64.rpm -rw-r--r-- 1 shawnyan shawnyan 24M Jan 9 02:07 ivorysql4-server-4.0-1.rhel9.x86_64.rpm
- 执行安装。
[shawnyan@rl9 ivorysql4]$ sudo dnf install ./ivorysql4-* Dependencies resolved. =========================================================================================== Package Arch Version Repository Size =========================================================================================== Installing: ivorysql4 x86_64 4.0-1.rhel9 @commandline 3.1 M ivorysql4-contrib x86_64 4.0-1.rhel9 @commandline 4.9 M ivorysql4-devel x86_64 4.0-1.rhel9 @commandline 6.4 M ivorysql4-docs x86_64 4.0-1.rhel9 @commandline 1.8 M ivorysql4-libs x86_64 4.0-1.rhel9 @commandline 1.5 M ivorysql4-llvmjit x86_64 4.0-1.rhel9 @commandline 11 M ivorysql4-plperl x86_64 4.0-1.rhel9 @commandline 234 k ivorysql4-plpython3 x86_64 4.0-1.rhel9 @commandline 266 k ivorysql4-pltcl x86_64 4.0-1.rhel9 @commandline 121 k ivorysql4-server x86_64 4.0-1.rhel9 @commandline 24 M Installing dependencies: clang-devel x86_64 18.1.8-3.el9 AppStream 3.2 M clang-tools-extra x86_64 18.1.8-3.el9 AppStream 20 M libedit-devel x86_64 3.1-38.20210216cvs.el9 AppStream 39 k llvm-devel x86_64 18.1.8-3.el9 AppStream 3.8 M llvm-googletest x86_64 18.1.8-3.el9 AppStream 376 k llvm-static x86_64 18.1.8-3.el9 AppStream 33 M llvm-test x86_64 18.1.8-3.el9 AppStream 635 k lz4 x86_64 1.9.3-5.el9 BaseOS 58 k Transaction Summary =========================================================================================== Install 18 Packages ... Complete! [shawnyan@rl9 ivorysql4]$
- 声明环境变量。
export PGHOME=/usr/local/ivorysql/ivorysql-4 export PGDATA=/var/lib/ivorysql/ivorysql-4/data export PATH=$PGHOME/bin:$PATH
- 初始化数据目录。
[ivorysql@rl9 ~]$ initdb The files belonging to this database system will be owned by user "ivorysql". 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 /var/lib/ivorysql/ivorysql-4/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 /var/lib/ivorysql/ivorysql-4/data -l logfile start [ivorysql@rl9 ~]$
- 启动数据库。
[ivorysql@rl9 ~]$ pg_ctl -D /var/lib/ivorysql/ivorysql-4/data -l logfile start waiting for server to start.... done server started
- 查验数据库版本。
[ivorysql@rl9 ~]$ psql -c 'select version()' version ------------------------------------------------------------------------------------------------------------------------- PostgreSQL 17.0 (IvorySQL 4.0) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.4.1 20231218 (Red Hat 11.4.1-3), 64-bit (1 row)
到此,IvorySQL 4.0 数据库安装成功。
从 PostgreSQL 升级到 IvorySQL
备份全库
IvorySQL 的控制信息与 PostgreSQL 有所区别,目前无法使用 pg_upgrade
直接从 PostgreSQL 升级到 IvorySQL。
[ivorysql@rl9 ~]$ pg_controldata | tail -n2 database mode: 1 case conversion mode: 1
我们可以通过 pg_dumpall
工具将数据从 PostgreSQL 导出,并导入到 IvorySQL,以此完成数据库升级任务。
备份前再次确认 PG 数据库中的表、数据。
[postgres@rl9 ~]$ psql -d shawnyan psql (12.22) Type "help" for help. shawnyan=# \d List of relations Schema | Name | Type | Owner --------+------------+-------+---------- mydb | t | table | postgres mydb | t_product | table | postgres mydb | t_wishlist | table | postgres (3 rows) shawnyan=# select count(*) from t; count ------- 1 (1 row) shawnyan=# select count(*) from t_product; count ------- 1000 (1 row) shawnyan=# select count(*) from t_wishlist; count ------- 3 (1 row)
执行备份。
pg_dumpall -c -f /tmp/pg12.sql
导入新库
直接从 psql 客户端执行恢复。
psql -f /tmp/pg12.sql
连接 IvorySQL 数据库确认数据是否正常导入。
[ivorysql@rl9 ~]$ psql psql (17.0) Type "help" for help. ivorysql=# \l List of databases Name | Owner | Encoding | Locale Provider | Collate | Ctype | Locale | ICU Rules | Access privileges -----------+----------+----------+-----------------+-------------+-------------+--------+-----------+----------------------- ivorysql | ivorysql | UTF8 | libc | en_US.UTF-8 | en_US.UTF-8 | | | postgres | postgres | UTF8 | libc | en_US.UTF-8 | en_US.UTF-8 | | | shawnyan | postgres | UTF8 | libc | en_US.UTF-8 | en_US.UTF-8 | | | template0 | ivorysql | UTF8 | libc | en_US.UTF-8 | en_US.UTF-8 | | | =c/ivorysql + | | | | | | | | ivorysql=CTc/ivorysql template1 | postgres | UTF8 | libc | en_US.UTF-8 | en_US.UTF-8 | | | postgres=CTc/postgres+ | | | | | | | | =c/postgres (5 rows) ivorysql=# \c shawnyan You are now connected to database "shawnyan" as user "ivorysql". shawnyan=# set search_path=mydb; SET shawnyan=# \d List of relations Schema | Name | Type | Owner --------+------------+-------+---------- mydb | t | table | postgres mydb | t_product | table | postgres mydb | t_wishlist | table | postgres (3 rows)
经查验,数据已经成功导入到 IvorySQL 4.0 数据库中,表结构和数据与 PostgreSQL 12.22 中的一致。
总结
本文介绍了从 PostgreSQL 12.22 升级到 IvorySQL 4.0 的主要步骤,包括在 Rocky Linux 9 上安装 IvorySQL 4.0,以及将 PostgreSQL 12.22 中的数据迁移到 IvorySQL 4.0 的过程,通过备份和恢复的方式,可以顺利完成数据库的升级和迁移工作。
在实际生产环境中,升级和迁移数据库是一个非常复杂的过程,需要考虑的因素较多。除了上述步骤外,还需要同步确认数据库高可用组件的升级,扩展插件的升级,监控项的调整,应用程序的连接驱动、安全认证,数据库功能变化和参数变化带来的影响,其他兼容性变更,以及对应用程序可能造成影响的其他因素等等。
升级完成后,还有可能需要重新收集执行计划,重建索引等工作。因此,在进行数据库升级和迁移之前,建议制定详细的升级计划和方案,并进行充分的测试和验证,以确保升级过程的顺利进行和业务的稳定运行。
关于 IvorySQL
lvorySQL 是由瀚高股份主导研发的一款开源的兼容 Oracle 的 PostgreSQL。IvorySQL 与 PostgreSQL 国际社区紧密合作,保持与最新 PG 版本内核同步,为用户提供便捷的升级体验。基于双 Parser 架构设计,100% 与原生 PostgreSQL 兼容,支持丰富的 PostgreSQL 周边工具和扩展,并根据用户需求提供定制化工具。同时,IvorySQL 4.0 提供更全面灵活的 Oracle 兼容功能,具备高度的 SQL 和 PL/SQL 兼容性能够为企业构建更加高效、稳定和灵活的数据库解决方案。
- 公众号:IvorySQL开源数据库社区
- 官网:https://www.ivorysql.org
- GitHub:https://github.com/IvorySQL/IvorySQL
- 社群:Wechat 搜索“ivorysql_official” 添加小助理进群 > 本文由博客一文多发平台 OpenWrite 发布!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
开源筑基 稳健发展丨OurBMC社区 2024 扬帆起航正当时
开源筑基 稳健发展丨OurBMC社区 2024 扬帆起航正当时
- 下一篇
鸿蒙 NEXT 开发中,普通对象跨线程如何传递
大家好,我是 V 哥,在鸿蒙HarmonyOS NEXT开发中,跨线程对象传递可以通过拷贝形式实现,确保两个线程的对象内容一致,但各自指向线程的隔离内存区间。以下是使用SharedArrayBuffer实现跨线程共享内存的完整案例代码,包括详细解释,整理的学习笔记,分享给大家。关注威哥不迷路,学习鸿蒙就很酷。 案例代码 1. 主线程代码 @Component export struct LockUsage { taskNum: number = 10; // 任务数,实际并行线程数依设备而定 baseDir: string = getContext().filesDir + '/TextDir'; // 文件写入的应用沙箱路径 sabInLock: SharedArrayBuffer = new SharedArrayBuffer(4); // 在主线程,初始化子线程锁标志位,所使用的共享内存 sabForLine: SharedArrayBuffer = new SharedArrayBuffer(4); // 在主线程,初始化子线程偏移位,所使用的共享内存 @State resul...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6