暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

IvorySQL 4.0 发布!新增支持 Ubuntu 系统

原创 严少安 2024-12-25
309

ivory4.png

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

  1. 从 GitHub 下载 DEB 安装包。

https://github.com/IvorySQL/IvorySQL/releases/tag/IvorySQL_4.0

本次发版提供了 RHEL 8 和 RHEL 9 安装包,以及源码包。

从 IvorySQL 4.0 开始,还新增提供了支持 Ubuntu 系统的 DEB 安装包。

  1. 安装、初始化 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)
  1. 初始化数据文件

声明环境变量,并执行命令 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 ~


🌻 往期精彩 ▼

– / END / –

👉 这里可以找到我

👉 这里有得聊

如果对国产基础软件(操作系统、数据库、中间件)感兴趣,可以加群一起聊聊。
关注微信公众号:少安事务所,后台回复[群],即可看到入口。

如果这篇文章为你带来了灵感或启发,就请帮忙点『』or『在看』or『转发』吧,感谢!ღ( ´・ᴗ・` )~

最后修改时间:2024-12-26 10:19:20
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论