从 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 安装为例,进行演示。

  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 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]$
  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 ... 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 ~]$
  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=# \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 兼容性能够为企业构建更加高效、稳定和灵活的数据库解决方案。

posted @   IvorySQL  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· [翻译] 为什么 Tracebit 用 C# 开发
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· 刚刚!百度搜索“换脑”引爆AI圈,正式接入DeepSeek R1满血版
点击右上角即可分享
微信分享提示