
12 月 23 日,IvorySQL 4.0 正式发布。✿✿ヽ(°▽°)ノ✿
如果你初见“象牙数据库 IvorySQL”,请先看下面这段内容,如果是老粉,请跳过。
- IvorySQL
IvorySQL 是一款以 PostgreSQL 为基础进行开发,并且兼容 Oracle 的开源数据库。IvorySQL 社区始终承诺与 PostgreSQL 数据库保持 100% 兼容,并且可以直接替换最新版本的 PostgreSQL。项目主要优势有:核心开源、兼容 Oracle、可定制化、简单易用、瀚高支持等。IvorySQL 项目是在 Apache 2.0 许可证下发布的,社区鼓励且欢迎所有类型的贡献和参与。
- IvorySQL 社区
IvorySQL 中国社区成员超 2000 人,覆盖 25 + 城市,涉及研发、测试、运维、架构师等岗位,覆盖政府、金融、教育等行业,有 22 + 贡献者为 IvorySQL 3.0 做出贡献。
往期内容:
IvorySQL 4.0 新特性
IvorySQL 4.0 全面支持 PostgreSQL 17,包含 PG 17 所有新特性,切换到 IvorySQL 4.0 即可体验 PG 17 的新功能。
关于 PG 17 的内容,参见:PostgreSQL 17 重磅发布
IvorySQL 4.0 新增和完善了多种 Oracle 兼容特性,具体如下。
不可见列
在 Oracle 兼容模式下,新增支持不可见列,可在 psql 扩展描述 (\d+) 中查看不可见列。对表的任何常规访问都不会显示不可见列。不可见列必须通过其列名显式引用,以便查询和其他操作访问它们。
示例:
创建带有不可见列的表,写入数据时显示指定列名,查看表描述,查询数据。
shawnyan=# CREATE TABLE t (id INT, sal INT INVISIBLE);
CREATE TABLE
shawnyan=# INSERT INTO t (id, sal) SELECT 1, 1000;
INSERT 0 1
shawnyan=# table t;
id
----
1
(1 row)
shawnyan=# select id, sal from t;
id | sal
----+------
1 | 1000
(1 row)
shawnyan=# \d+ t
Table "public.t"
Column | Type | Collation | Nullable | Default | Invisible | Storage | Compression | Stats target | Description
--------+-----------------+-----------+----------+---------+-----------+---------+-------------+--------------+-------------
id | pg_catalog.int4 | | | | | plain | | |
sal | pg_catalog.int4 | | | | invisible | plain | | |
Access method: heap
shawnyan=#
Package 包
IvorySQL 4.0 新增支持 PL/SQL 包管理,包括创建、修改和描述包和包主体。psql 交互式终端已通过新的 \dk 命令进行了增强,用于与包相关的操作。此外,通过新的 ACL 功能启用高级权限管理,并实施包缓存以提高性能。
包(package)是一个封装的相关程序对象集合,程序对象包括过程、函数、变量、常量、游标和异常。
示例:
创建一个包和一个包体(PACKAGE BODY),并使用 \dk 元命令查看定义。
shawnyan=# CREATE OR REPLACE PACKAGE pkg AS
var INT := 100;
FUNCTION get_var RETURN INT;
PROCEDURE set_var(new_var INT);
END;
shawnyan-# /
CREATE PACKAGE
shawnyan=#
shawnyan=# CREATE OR REPLACE PACKAGE BODY pkg AS
FUNCTION get_var RETURN INT AS
BEGIN
RETURN pkg.var;
END;
PROCEDURE set_var(new_var INT) AS
BEGIN
pkg.var := new_var;
END;
END;
shawnyan-# /
CREATE PACKAGE BODY
shawnyan=#
shawnyan=# SELECT pkg.get_var() FROM DUAL;
get_var
---------
100
(1 row)
shawnyan=# CALL pkg.set_var(200);
CALL
shawnyan=# SELECT pkg.get_var() FROM DUAL;
get_var
---------
200
(1 row)
shawnyan=# \dk+ pkg
List of packages
Schema | Name | Owner | Security | Editionable | Use Collation | Specification | Package Body
--------+------+----------+----------+-------------+---------------+-----------------------------------+-------------------------------------
public | pkg | shawnyan | definer | Editionable | default | var INT := 100; +| FUNCTION get_var RETURN INT AS +
| | | | | | FUNCTION get_var RETURN INT; +| BEGIN +
| | | | | | PROCEDURE set_var(new_var INT);+| RETURN pkg.var; +
| | | | | | END | END; +
| | | | | | | +
| | | | | | | PROCEDURE set_var(new_var INT) AS+
| | | | | | | BEGIN +
| | | | | | | pkg.var := new_var; +
| | | | | | | END; +
| | | | | | | END
(1 row)
shawnyan=#
在 Ubuntu 操作系统安装 IvorySQL 4.0
关于 IvorySQL 的安装,还是熟悉的配方,只是命令有所区别。
升级操作系统 Ubuntu 24.04 LTS
关于操作系统的准备工作这里不在赘述。
需要注意的是,IvorySQL 4.0 需要安装在新版的 Ubuntu 系统中,或者升级 icu 类包的版本。
shawnyan@u20:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.6 LTS"
shawnyan@u20:~$
shawnyan@u20:~$ initdb
initdb: error while loading shared libraries: libicuuc.so.74: cannot open shared object file: No such file or directory
shawnyan@u20:~$ sudo find / -name libicuuc.so.*
/usr/lib/x86_64-linux-gnu/libicuuc.so.66
/usr/lib/x86_64-linux-gnu/libicuuc.so.66.1
从 Ubuntu 20.04.6 LTS 升级到 Ubuntu 24.04 LTS。
root@u24:~# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=24.04
DISTRIB_CODENAME=noble
DISTRIB_DESCRIPTION="Ubuntu 24.04.1 LTS"
安装 IvorySQL 4.0
- 从 GitHub 下载 DEB 安装包。
https://github.com/IvorySQL/IvorySQL/releases/tag/IvorySQL_4.0
本次发版提供了 RHEL 8 和 RHEL 9 安装包,以及源码包。
从 IvorySQL 4.0 开始,还新增提供了支持 Ubuntu 系统的 DEB 安装包。
- 安装、初始化 IvorySQL 数据库。
将安装包上传到服务器后,执行安装命令。
shawnyan@u24:~$ sudo apt install ./ivorysql-4.0.x86_64.deb
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'ivorysql4.0' instead of './ivorysql-4.0.x86_64.deb'
The following NEW packages will be installed:
ivorysql4.0
0 upgraded, 1 newly installed, 0 to remove and 66 not upgraded.
Need to get 0 B/19.1 MB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 /home/shawnyan/ivorysql-4.0.x86_64.deb ivorysql4.0 amd64 4.0 [19.1 MB]
Selecting previously unselected package ivorysql4.0.
(Reading database ... 83790 files and directories currently installed.)
Preparing to unpack .../ivorysql-4.0.x86_64.deb ...
Unpacking ivorysql4.0 (4.0) ...
Setting up ivorysql4.0 (4.0) ...
Scanning processes...
Scanning linux images...
Running kernel seems to be up-to-date.
No services need to be restarted.
No containers need to be restarted.
No user sessions are running outdated binaries.
No VM guests are running outdated hypervisor (qemu) binaries on this host.
N: Download is performed unsandboxed as root as file '/home/shawnyan/ivorysql-4.0.x86_64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
- 初始化数据文件
声明环境变量,并执行命令 initdb 初始化数据文件。
连接 IvorySQL 4.0
在上面步骤都顺利完成后,执行命令 pg_ctl start 拉起数据库。
使用 psql 客户端连接到 IvorySQL 数据库,并查看数据库版本。
shawnyan@u24:~$ psql
psql (17.0)
Type "help" for help.
shawnyan=# \l
List of databases
Name | Owner | Encoding | Locale Provider | Collate | Ctype | Locale | ICU Rules | Access privileges
-----------+----------+----------+-----------------+-------------+-------------+--------+-----------+-----------------------
ivorysql | shawnyan | UTF8 | libc | en_US.UTF-8 | en_US.UTF-8 | | |
postgres | shawnyan | UTF8 | libc | en_US.UTF-8 | en_US.UTF-8 | | |
shawnyan | shawnyan | UTF8 | libc | en_US.UTF-8 | en_US.UTF-8 | | |
template0 | shawnyan | UTF8 | libc | en_US.UTF-8 | en_US.UTF-8 | | | =c/shawnyan +
| | | | | | | | shawnyan=CTc/shawnyan
template1 | shawnyan | UTF8 | libc | en_US.UTF-8 | en_US.UTF-8 | | | =c/shawnyan +
| | | | | | | | shawnyan=CTc/shawnyan
(5 rows)
shawnyan=# select version();
version
----------------------------------------------------------------------------------------------------------------------
PostgreSQL 17.0 (IvorySQL 4.0) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0, 64-bit
(1 row)
shawnyan=#
好了,关于 IvorySQL 4.0 数据库的新功能就先介绍到这里,更多内容请参考官方文档 https://docs.ivorysql.org 。
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『转发』吧,感谢!ღ( ´・ᴗ・` )~




