从 PostgreSQL 升级至 IvorySQL 4.0

news/2025/2/8 11:20:21/文章来源:https://www.cnblogs.com/ivorysql/p/18702044

本文作者:颜少安,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 ~]$ hostnamectlStatic hostname: rl9.shawnyan.cn
Operating System: Rocky Linux 9.5 (Blue Onyx)Kernel: Linux 5.14.0-503.15.1.el9_5.x86_64Architecture: x86-64
[shawnyan@rl9 ~]$

IvorySQL 数据库的本地安装方式通常包括:YUM/DNF 源安装、RPM 安装、源码安装、Docker 安装。

接下来以 RPM 安装为例,进行演示。

  1. 下载 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
  1. 执行安装。
[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 Mivorysql4-contrib        x86_64      4.0-1.rhel9                  @commandline      4.9 Mivorysql4-devel          x86_64      4.0-1.rhel9                  @commandline      6.4 Mivorysql4-docs           x86_64      4.0-1.rhel9                  @commandline      1.8 Mivorysql4-libs           x86_64      4.0-1.rhel9                  @commandline      1.5 Mivorysql4-llvmjit        x86_64      4.0-1.rhel9                  @commandline       11 Mivorysql4-plperl         x86_64      4.0-1.rhel9                  @commandline      234 kivorysql4-plpython3      x86_64      4.0-1.rhel9                  @commandline      266 kivorysql4-pltcl          x86_64      4.0-1.rhel9                  @commandline      121 kivorysql4-server         x86_64      4.0-1.rhel9                  @commandline       24 M
Installing dependencies:clang-devel              x86_64      18.1.8-3.el9                 AppStream         3.2 Mclang-tools-extra        x86_64      18.1.8-3.el9                 AppStream          20 Mlibedit-devel            x86_64      3.1-38.20210216cvs.el9       AppStream          39 kllvm-devel               x86_64      18.1.8-3.el9                 AppStream         3.8 Mllvm-googletest          x86_64      18.1.8-3.el9                 AppStream         376 kllvm-static              x86_64      18.1.8-3.el9                 AppStream          33 Mllvm-test                x86_64      18.1.8-3.el9                 AppStream         635 klz4                      x86_64      1.9.3-5.el9                  BaseOS             58 kTransaction Summary
===========================================================================================
Install  18 Packages
...
Complete!
[shawnyan@rl9 ivorysql4]$
  1. 声明环境变量。
export PGHOME=/usr/local/ivorysql/ivorysql-4
export PGDATA=/var/lib/ivorysql/ivorysql-4/data
export PATH=$PGHOME/bin:$PATH
  1. 初始化数据目录。
[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 ... okinitdb: 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 ~]$
  1. 启动数据库。
[ivorysql@rl9 ~]$ pg_ctl -D /var/lib/ivorysql/ivorysql-4/data -l logfile start
waiting for server to start.... done
server started
  1. 查验数据库版本。
[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=# \dList of relationsSchema |    Name    | Type  |  Owner
--------+------------+-------+----------mydb   | t          | table | postgresmydb   | t_product  | table | postgresmydb   | 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=# \lList of databasesName    |  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/ivorysqltemplate1 | 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=# \dList of relationsSchema |    Name    | Type  |  Owner
--------+------------+-------+----------mydb   | t          | table | postgresmydb   | t_product  | table | postgresmydb   | 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” 添加小助理进群

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

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

相关文章

本地部署 DeepSeek-R1-内部知识库

本地部署 DeepSeek-R1-内部知识库本地部署 DeepSeek-R1-内部知识库环境准备1. 确认系统要求2. 安装 Homebrew一. 安装ollama和启动服务1.1 安装 ollama1.2 启动服务1.3 拉取模型并运行二.运行DeepSeek-R1-集成web页面2.1 运行模型2.2 安装Openweb-UI 界面环境准备 1. 确认系统要…

vscode编写javascript代码时ctrl和f12等快捷键失效

提供一种可能性,由于vscode内置扩展@builtin typescript-language-features被关闭导致无法上下文感知跳转。将其重新启用即可

allegro每次保存时都说提示覆盖原图

保存文件时提示,一般新装的软件才会有这个提示 我们改下设置就不会再弹出这个提示了 Setuo-User Preferences,然后在工具栏搜索Savedb点击搜素,如下图复选框里打勾就行

车流量检测摄像头

车流量检测摄像头广泛应用于城市交通管理、高速公路收费站、停车场管理及大型活动现场等多个领域。在城市中,这些设备为交通信号控制提供数据支持,从而提升通行效率。在高速公路上,它们则用于实时监控车速与流量,以便及时调整收费政策和疏导措施。此外,在停车场中,这类设…

安全帽佩戴智能识别摄像机

安全帽佩戴智能识别摄像机的出现,为安全管理带来了革新性的变化。这种智能摄像机基于先进的计算机视觉技术。其核心算法能够精准地对画面中的物体和人员进行识别。在识别安全帽佩戴情况时,它可以迅速分析图像中每个人员头部的特征,准确判断安全帽是否存在。它像是一位不知疲…

使用 CloudDM 和钉钉流程化管理数据库变更审批

CloudDM 是一个专为团队协同工作打造的数据库数据管控平台。在管控数据库安全变更的过程中,为提高效率,CloudDM 接入了钉钉,支持实时通知与移动办公,满足广大企业用户的实际需求。 本文将介绍如何使用 CloudDM 和钉钉实现高效的数据库变更审批。 接入钉钉 创建钉钉应用登录…

tomcat中部署finereport11.0

手动将finereport11.0部署到Tomcat中1、本文目的 在tomcat中直接访问FineReport的cpt文件,跳过登录。 2、执行步骤创建工作目录将%Tomcat_HOME%\webapps\examples文件复制一份出来,重命名为FR,只保留WEB-INF文件夹,其余全部删除。修改web.xml文件编辑%Tomcat_HOME%/webapps…

富滇银行研发管理从数字化走向智能化 | 通义灵码企业标杆案例

经过几个月的持续优化及通义灵码产品能力的迭代,行内用户活跃度持续提升,AI代码生成占比超过30%,单元测试覆盖率持续提升,周期内未发生重大故障。技术人员已养成使用通义灵码进行编码和研发问答的习惯,进一步推动了软件开发的智能化转型。百年传承,富民兴滇。作为一家拥有…

车间产线作业流程合规检测系统

车间产线作业流程合规检测系统通过在车间内安装多个高清摄像头,车间产线作业流程合规检测系统实时捕捉工人在产线上的操作行为。系统可以自动检测工人在生产过程中是否按照正确的顺序执行任务,是否使用正确的工具,是否遵守安全规定等。如果系统检测到工人的操作行为违规,它…

SQL注入-Windows/Docker 环境部署 SQLi-labs 靶场

一、SQLi-labs简介 SQLi-labs是由印度程序员开发,专门用于练习SQL注入的靶场,其中包含各种注入姿势,并适用于GET和POST等场景。 主要包含:基础错误注入、报错注入、盲注、MySQL读写文件、更新查询注入、插入查询注入、Header头部注入、二次注入、绕过WAF、绕过addslashes函…

openai-whisper+fastapi实现语音转文本

Whisper 是一种通用的语音识别模型。它基于各种音频的大型数据集进行训练,也是一种多任务模型,可以执行多语言语音识别、语音翻译和语言识别。Transformer 序列到序列模型针对各种语音处理任务进行训练,包括多语言语音识别、语音翻译、口语识别和语音活动检测。这些任务共同…

在阿里云ECS上一键部署DeepSeek-R1

DeepSeek-R1 是一款开源模型,也提供了 API(接口)调用方式。据 DeepSeek介绍,DeepSeek-R1 后训练阶段大规模使用了强化学习技术,在只有极少标注数据的情况下提升了模型推理能力,该模型性能对标 OpenAl o1 正式版。DeepSeek-R1 推出后,该模型热度持续攀升。 部署流程点击 部…