跳到主要内容

· 1 分钟阅读

IvorySQL is an open source project. One of the core goals of this project is to deliver oracle compatibility, So that one can use the oracle code on IvorySQL database server.

Providing Oracle compatibility on top of PostgreSQL is a multi-dimensional task. Ranging from providing the Oracle compatible SQL syntax to adding support for data types that are either missing or behaves differently in PostgreSQL. One of the main core of Oracle compatibility is to provide the compatible PL (procedural language) in PostgreSQL that is functionally and syntactical compatible with Oracle's PL/SQL. For that purpose IvorySQL has added a new PL language PL/iSQL that that accepts, understands and executes the PL/SQL syntax. And as you know one of the core feature of Oracle's PL/SQL is the PACKAGES. Package is a schema object in Oracle that contains definitions for a group of related functionalities and is one of the most widely used feature of Oracle.

So In this blog I will give a introduction of Packages followed by an example on how you can create, use, and destroy Oracle style packages with IvorySQL.

Packages

So what are packages? The Packages are grouping of PL/iSQL code, divided in logical program units. In other words a package can be considered a collection of related functions, procedures, variables or cursors. This collection is collectively be accessed via the common name.

IvorySQL has PL/iSQL language that accepts, understands and executes the PL/SQL code. The packages use this same language. The packages have two main components.

  • Package Specification The package specification lists all the items that can be accessed from outside the package. such as functions, procedures, variables and cursors. This is also know as public specification.

  • Package Body The Package Body contains the implementation of all functions and procedures that are listed in the package specification. In addition these, it can also implement more function and procedure or other elements.

These elements that are not in the package specification, will be treated private members of the package and these can only be referenced from within the package. The outside access is not permitted.

The package body can also have a special code block called initializer block. This is a special because this block is executed only once per session, at the very beginning when the package is first accessed.

Let's see some example of the code and see how a package operates.

Example

Generic Example

First let's set the compatibility mode, so we can access oracle compatible features available in the ivorysql database.

SET compatible_mode TO oracle;

CREATE TABLE books (
id INT,
title VARCHAR2(100),
author VARCHAR2(100),
price NUMBER);
INSERT INTO books VALUES (10, 'The Hobbit', 'J. R. R. Tolkien', 10.0);
INSERT INTO books VALUES (11, 'Winnie-the-Pooh', 'A. A. Milne', 5.0);
INSERT INTO books VALUES (12, 'Peter Pan', 'James Matthew Barrie', 4.0);
INSERT INTO books VALUES (13, 'Charlie and the Chocolate Factory', 'Roald Dahl', 5.0);
INSERT INTO books VALUES (14, 'SThe Jungle Book', 'Rudyard Kipling', 9.0);
INSERT INTO books VALUES (15, 'The Little White Bird', 'James Matthew Barrie', 3.0);

Let's create a simple package. This package declares a cursor to list all available books. Have some subprograms to list, add and remove books. It also declares a some private variables to keep count and book information.

CREATE OR REPLACE PACKAGE mybooks AS
CURSOR booksinfo IS SELECT * from BOOKS;

PROCEDURE list_books;
FUNCTION add_book(title VARCHAR2(100), author VARCHAR2(100),
price NUMBER) RETURN bool;
PROCEDURE remove_book(book_title VARCHAR2(100));
END;
ivorysql$# /
CREATE PACKAGE
CREATE OR REPLACE PACKAGE BODY mybooks AS

-- declare private variables
bookinfo booksinfo%rowtype;
books_count INT;

PROCEDURE list_books AS
BEGIN
OPEN booksinfo;
RAISE INFO 'Book Info:';
RAISE INFO '';
LOOP
FETCH booksinfo into bookinfo;
EXIT WHEN NOT FOUND;

RAISE INFO ' Name = %', bookinfo.title;
RAISE INFO ' Author = %', bookinfo.author;
RAISE INFO ' Price = %', bookinfo.price;
RAISE INFO '------------------------------';
END LOOP;
RAISE INFO 'Total Books = %', books_count;
CLOSE booksinfo;
END;

FUNCTION add_book(title VARCHAR2(100), author VARCHAR2(100),
price NUMBER) RETURN bool AS
BEGIN
INSERT INTO BOOKS VALUES (
books_count + 1,
title,
author,
price);

books_count := books_count + 1;
RETURN true;

EXCEPTION WHEN OTHERS THEN
RETURN false;
END;

PROCEDURE remove_book(book_title VARCHAR2(100)) AS
BEGIN
DELETE FROM BOOKS WHERE title = book_title;

EXCEPTION WHEN OTHERS THEN
RAISE INFO 'Book % not found', book_title;
END;

-- initializer block
BEGIN
books_count := 0;
SELECT count(*) INTO books_count
FROM BOOKS;
END;
ivorysql$# /
CREATE PACKAGE BODY

Let checkout the count. This anonymous block tries to access the private members of the package, which should result in error.

ivorysql=# DECLARE
ivorysql$# nbooks int := 0;
ivorysql$# BEGIN
ivorysql$# nbooks := mybooks.books_count;
ivorysql$# RAISE INFO 'Total Books = %', nbooks;
ivorysql$# END;
ivorysql$# /
2022-05-26 16:35:32.328 PKT [63554] ERROR: package private variable ("mybooks.books_count") is not accessible

Let's list all available books using the subprogram list_books of the package mybooks.

ivorysql=# BEGIN
ivorysql$# mybooks.list_books;
ivorysql$# END;
ivorysql$# /
INFO: Book Info:
INFO:
INFO: Name = The Hobbit
INFO: Author = J. R. R. Tolkien
INFO: Price = 10
INFO: ------------------------------
INFO: Name = Winnie-the-Pooh
INFO: Author = A. A. Milne
INFO: Price = 3
....
....
INFO: Total Books = 6
DO
ivorysql=#

Let's add a new book using the subprogram add_book of the package mybooks.

DECLARE
added bool;
BEGIN
added := mybooks.add_book('The Cat in the Hat', 'Dr. Seuss', 10);
IF added = TRUE THEN
RAISE INFO 'new book added';
END IF;
END;
/

Dropping a Package

One can either drop the package body or complete package using:

  • DROP PACKAGE BODY [package name]
ivorysql=# DROP PACKAGE BODY mybooks;
DROP PACKAGE BODY
  • DROP PACKAGE [package name
ivorysql=# DROP PACKAGE mybooks;
DROP PACKAGE

Package Invocation with different rights

We are going to create two packages with invoker and definer rights and watch the results to see how they differentiate.

ivorysql=> SELECT current_user;
current_user
--------------
ivorysql
(1 row)

-- Create a Package with INVOKER rights

CREATE OR REPLACE PACKAGE pkg_invrights AUTHID CURRENT_USER AS
PROCEDURE curr_user;
END;
/

CREATE OR REPLACE PACKAGE BODY pkg_invrights AS
PROCEDURE curr_user AS
BEGIN
RAISE INFO 'Current User: %', current_user;
END;
END;
/

-- Create a Package with DEFINER rights

CREATE OR REPLACE PACKAGE pkg_defrights AUTHID DEFINER AS
PROCEDURE curr_user;
END;
/

CREATE OR REPLACE PACKAGE BODY pkg_defrights AS
PROCEDURE curr_user AS
BEGIN
RAISE INFO 'Current User: %', current_user;
END;
END;
/

Let's see the package with invoker rights first.

ivorysql=> CALL pkg_invrights.curr_user;
INFO: Current User: ivorysql
CALL

Let's see the package with definer rights.

ivorysql=> CALL pkg_defrights.curr_user;
INFO: Current User: ivorysql
CALL

Let's switch to another user named ivuser

ivorysql=> \c ivorysql ivuser;
You are now connected to database "ivorysql" as user "ivuser".

Let's see the package with invoker rights first.

ivorysql=> CALL pkg_invrights.curr_user;
INFO: Current User: ivuser
CALL

Let's see the package with definer rights.

ivorysql=> CALL pkg_defrights.curr_user;
INFO: Current User: ivorysql
CALL

As shown above when the package with invoker rights (pkg_invrights) is called, it's using the privileges of the user that invoked the package. However, when a definer package (pkg_defrights) is called, it still uses the privileges of the package owner.

· 1 分钟阅读

IvorySQL可以在Linux, OSX, Unix和Windows平台上构建,与PostgreSQL的编译安装基本上是一样的。本文对基于Linux的系统上编译源代码的步骤进行说明。

一、准备工作

1.1 获取 IvorySQL 源码

Windows或Linux,只要安装了git,都可以使用git下载:

git clone https://github.com/IvorySQL/IvorySQL.git

git clone https://gitee.com/IvorySQL/IvorySQL.git

或者直接去github或gitee下载都可以:

https://github.com/IvorySQL/IvorySQL

https://gitee.com/IvorySQL/IvorySQL

github会有点慢,能用则用,不行就改用gitee。

截至本稿,IvorySQL的最新发布版本是1.2,于2022年2月28日发布。

L

本文使用的源码版本也是IvorySQL 1.2。

1.2 安装依赖包

要从源代码编译IvorySQL,必须确保系统上有可用的先决条件包。 执行以下命令安装相关包:

sudo yum install -y bison-devel readline-devel zlib-devel openssl-devel wget
sudo yum groupinstall -y 'Development Tools'

说明:“Development Tools”包含了gcc,make,flex,bison。

二、编译安装

前面通过获取的源码在文件夹IvorySQL里,接下来我们就进入这个文件夹进行操作。

2.1 配置

Root用户执行以下命令进行配置:

./configure

说明:由于没有提供--prefix,默认安装在/usr/local/pgsql。

指定安装路径,如“/usr/local/ivorysql/ivorysql-1.2”:

./configure --prefix=/usr/local/ivorysql/ivorysql-1.2

注意:我们要记住指定的目录,因为系统查不出已经编译安装的程序在哪。

更多configure参数通过“./configure --help”查看。还可以查看PostgreSQL手册。

2.2 编译安装

配置完成后,执行make进行编译:

make

要在安装新编译的服务之前使用回归测试测试一下,以下命令均可:

make check
make check-world

然后安装:

make install

三、初始化数据库服务

我们这里只是简单配置一下,能本地和远程连接就可以了。

3.1 创建操作系统用户

用户root会话下,新建用户 ivorysql:

/usr/sbin/groupadd ivorysql
/usr/sbin/useradd -g ivorysql ivorysql -c "IvorySQL1.2 Server"
passwd ivorysql

3.2 创建数据目录

接下来需要创建数据目录并修改权限。在root会话下执行以下命令。

mkdir -p /ivorysql/1.2/data
chown -R ivorysql.ivorysql /ivorysql/1.2/

注意:这里没按RPM安装将数据目录放置到“/var/lib/ivorysql/ivorysql-1/data”。

3.3 环境变量

切换到用户ivorysql,修改文件“/home/ ivorysql /.bash_profile”,配置环境变量:

umask 022
export LD_LIBRARY_PATH=/usr/local/pgsql/lib:$LD_LIBRARY_PATH
export PATH=/usr/local/pgsql/bin:$PATH
export PGDATA=/ivorysql/1.2/data

使环境变量在当前ivorysql用户会话中生效:

source .bash_profile

也可以重新登录或开启一个新的用户ivorysql的会话。

3.4 设置防火墙

如果开启了防火墙,还需要将端口5333开放:

firewall-cmd --zone=public --add-port=5333/tcp --permanent
firewall-cmd --reload

说明:默认端口是5333,如果不开放该端口,外部客户端通过ip连接会失败。

3.5 初始化

在用户ivorysql下,简单执行initdb就可以完成初始化:

initdb

说明:initdb操作与PostgreSQL一样,可以按照PG的习惯去初始化。

3.6 启动数据库

使用pg_ctl启动数据库服务:

pg_ctl start

查看状态,启动成功:

pg_ctl status

pg_ctl: server is running (PID: 29549)

/usr/local/pgsql/bin/postgres

四、配置服务

这里只是简单配置一下,能本地和远程连接就可以了

4.1 客户端验证

修改 /ivorysql/1.2/data/pg_hba.conf,追加以下内容:

host    all             all             0.0.0.0/0               trust

注意:这里是trust,就是说可以免密登录。

执行以下命令加载配置:

pg_ctl reload

4.2 基本参数

通过psql连接数据库:

psql

修改监听地址:

alter system set listen_addresses = '*';

说明:默认是监听在127.0.0.1,主机外是连不上服务的。

重启服务使设置生效:

pg_ctl restart

4.3 守护服务

创建service文件:

touch /usr/lib/systemd/system/ivorysql.service

编辑内容如下:

[Unit]
Description=IvorySQL 1.2 database server
Documentation=https://www.ivorysql.org
Requires=network.target local-fs.target
After=network.target local-fs.target

[Service]
Type=forking

User=ivorysql
Group=ivorysql

Environment=PGDATA=/ivorysql/1.2/data/

OOMScoreAdjust=-1000

ExecStart=/usr/local/pgsql/bin/pg_ctl start -D ${PGDATA}
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D ${PGDATA}
ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D ${PGDATA}

TimeoutSec=0

[Install]
WantedBy=multi-user.target

说明:service的写法有很多,在生产环境使用时需谨慎,请多次重复测试。

停止pg_ctl启动的数据库服务,启用systemd服务并启动:

systemctl enable --now ivorysql.service

IvorSQL数据库服务操作命令:

systemctl start ivorysql.service            --启动数据库服务
systemctl stop ivorysql.service --停止数据库服务
systemctl restart ivorysql.service --重启数据库
systemctl status ivorysql.service --查看数据库状态
systemctl reload ivorysql.service --可以满足部分数据库配置修改完后生效

五、客户端链接数据库

连接IvorySQL数据库服务的客户端工具和PostgreSQL的一样。

5.1 psql 连接

操作系统用户ivorysql会话下连接:

[ivorysql@Node02 ~]$ psql
psql (15devel)
Type "help" for help.

ivorysql=#

5.2 DBeaver 连接

DBeaver是一个功能比较强大的开源工具,连接配置如下:

L

5.3 瀚高 developer 连接

瀚高developer是瀚高自主研发的一个工具,除了可以支持瀚高数据库,还支持PostgreSQL以及IvorySQL数据库。连接配置如下:

L

如果想使用该工具,请关注公众号加入微信群“IvorySQL中国技术交流群”咨询。

六、卸载

编译安装就用编译卸载的方式卸载。

6.1 备份数据

数据目录在“/ivorysql/1.2/data”下,所以我们将该目录保护好就可以,最好停止数据库服务后做备份。

6.2 编译卸载

Root会话下切到源码目录下,分别执行以下命令:

make uninstall
make clean

删除残余目录和文件:

systemctl disable ivorysql.servicemake                  --禁用服务
mv /usr/lib/systemd/system/ivorysql.service /tmp/ --服务文件移到/tmp,删除也可以
rm -fr /usr/local/pgsql --删除残留安装目录

还有用户ivorysql以及对应的环境变量,可以根据情况是否清理。

剩下的就是数据目录“/ivorysql/1.2/data”了,请务必做好备份再做处理。

还有安装的依赖包,可根据情况决定是否卸载。

七、后记

  • 更细化的操作,可参照PostgreSQL的相关内容。

  • 大家还可以参考IvorySQL源码下自带文档:/root/IvorySQL/README.md。

  • 也可以打开网站链接:https://gitee.com/IvorySQL/IvorySQL/blob/master/README.md。

  • 有任何问题,欢迎大家到IvorySQL官方社区仓库:github.com/IvorySQL/IvorySQL 提交issue。

关于IvorySQL

IvorySQL项目是一个具有广泛生态基础和中国特色的PG开源衍生项目,是瀚高公司设计研发的一款具备强大Oracle兼容能力的开源数据库。具备高兼容性和高可用性,并致力于遵守open-source ways。

社区仓库github.com/IvorySQL/IvorySQL

CSDN: IvorySQL

开源中国:IvorySQL

墨天轮:IvorySQL


通过订阅邮件列表加入IvorySQL社区:

还有,别忘了在Github给我们一个 ⭐

· 1 分钟阅读

通过 YUM 源安装软件

下面我们以操作系统Centos7.9环境为例,看看如何安装IvorySQL数据库。先介绍最简单的YUM源安装。

1.1 安装 YUM 源

下载地址:https://yum.highgo.ca/ivorysql.html

点击图中按钮【DOWNLOAD REPO RPM】下载ivorysql-release-1.0-1.noarch.rpm并传到Centos7.9:

yum

或者在Centos7上使用wget下载:

wget https://yum.highgo.ca/dists/ivorysql-rpms/repo/ivorysql-release-1.0-1.noarch.rpm

安装ivorysql-release-1.0-1.noarch.rpm:

rpm -ivh ivorysql-release-1.0-1.noarch.rpm

安装后,将创建YUM源配置文件:/etc/yum.repos.d/ivorysql.repo。

搜索查看相关安装包:

yum search ivorysql

搜索结果说明见表1:

​ 表1 YUM源说明

序号包名描述
1ivorysql1.x86_64IvorySQL 客户端程序和库文件
2ivorysql1-contrib.x86_64随IvorySQL发布的已贡献的源代码和二进制文件
3ivorysql1-devel.x86_64IvorySQL开发头文件和库
4ivorysql1-docs.x86_64IvorySQL的额外文档
5ivorysql1-libs.x86_64所有IvorySQL客户端所需的共享库
6ivorysql1-llvmjit.x86_64对IvorySQL的即时编译支持
7ivorysql1-plperl.x86_64用于IvorySQL的过程语言Perl
8ivorysql1-plpython3.x86_64用于IvorySQL的过程语言Python3
9ivorysql1-pltcl.x86_64用于IvorySQL的过程语言Tcl
10ivorysql1-server.x86_64创建和运行IvorySQL服务器所需的程序
11ivorysql1-test.x86_64随IvorySQL发布的测试套件
12ivorysql-release.noarch瀚高基础软件股份有限公司的Yum源配置RPM包

说明:1、2、5、10是RPM包安装需要的,超链接可以单独下载。

1.2 安装 IVORYSQL

要安装数据库服务,需要安装ivorysql1-server。 在用户root会话下执行以下命令:

yum install -y ivorysql1-server

安装清单:

ivorysql1-server.x86_64 0:1.2-1.rhel7

依赖安装:

  • ivorysql1.x86_64 0:1.2-1.rhel7 ivorysql1-contrib.x86_64 0:1.2-1.rhel7

  • ivorysql1-libs.x86_64 0:1.2-1.rhel7 libicu.x86_64 0:50.2-4.el7_7

  • libtirpc.x86_64 0:0.2.4-0.16.el7 libxslt.x86_64 0:1.1.28-6.el7

  • python3.x86_64 0:3.6.8-18.el7 python3-libs.x86_64 0:3.6.8-18.el7

  • python3-pip.noarch 0:9.0.3-8.el7 python3-setuptools.noarch 0:39.2.0-10.el7

1.3 已安装目录

表2对YUM安装过程产生的文件目录进行说明。

​ 表2 安装目录文件说明

序号文件路径描述
1/usr/local/ivorysql/ivorysql-1软件安装目录
2/var/lib/ivorysql/ivorysql-1/data数据目录(默认)
3/usr/bin/ivorysql-1-setup帮助系统管理员进行基本的数据库集群管理
4/usr/lib/systemd/system/ivorysql-1.service守护服务

1.4 RPM安装

顺便说一下RPM安装,需要按这个顺序安装:

yum install -y libicu libxslt python3                   --先安装依赖
rpm -ivh ivorysql1-libs-1.2-1.rhel7.x86_64.rpm
rpm -ivh ivorysql1-1.2-1.rhel7.x86_64.rpm
rpm -ivh ivorysql1-contrib-1.2-1.rhel7.x86_64.rpm --nodeps
rpm -ivh ivorysql1-server-1.2-1.rhel7.x86_64.rpm

所以,使用YUM安装还是很方便的。如果没条件,就单独下载按这个顺序安装吧。

下载地址:https://yum.highgo.ca/ivorysql.html

yum

点击【BROWSE REPOSITORY-1】找到对应的包下载即可(注意:官网没提供依赖包)。

初始化数据库

IvorySQL数据库默认初始化以及启停等操作比较简单。

2.1 默认初始化

我们可以在root用户下,执行以下命令使用系统默认参数来初始化:

/usr/local/ivorysql/ivorysql-1/bin/ivorysql-1-setup initdb

说明:由于没有提供SERVICE_NAME,默认会读ivorysql-1。

启用并启动服务:

systemctl enable --now ivorysql-1.service

ivorysql-1-setup的用法:

ivorysql-1-setup {initdb|check_upgrade|upgrade} [SERVICE_NAME]

说明:该命令的详细用法,执行命令“ivorysql-1-setup --help”查看。

2.2 自定义初始化

假如我们有个需求,要制定数据文件路径(/ivorysql/1.2/data/)和端口号(5866),那我们就可以定制初始化。

根据默认的服务文件“/usr/lib/systemd/system/ivorysql-1.service”在相同目录下复制一个新的“ivorysql-5866.service”:

cp /usr/lib/systemd/system/ivorysql-1.service /usr/lib/systemd/system/ivorysql-5866.service

修改添加以下内容:

Environment=PGDATA=/ivorysql/1.2/data/
Environment=PGPORT=5866

指定SERVICE_NAME为ivorysql-5866来初始化:

/usr/local/ivorysql/ivorysql-1/bin/ivorysql-1-setup initdb ivorysql-5866

启用并启动服务:

systemctl enable --now ivorysql-5866.service

2.3 常用服务操作

IvorSQL数据库服务操作命令:

systemctl start ivorysql-1.service              --启动数据库服务
systemctl stop ivorysql-1.service --停止数据库服务
systemctl restart ivorysql-1.service --重启数据库
systemctl status ivorysql-1.service --查看数据库状态
systemctl reload ivorysql-1.service --可以满足部分数据库配置修改完后生效

配置数据库服务

我们这里只是简单配置一下,能本地和远程连接就可以了。

3.1 客户端验证

修改 /var/lib/ivorysql/ivorysql-1/data/pg_hba.conf,追加以下内容:

host    all             all             0.0.0.0/0               scram-sha-256

执行以下命令加载配置:

systemctl reload ivorysql-1.service

3.2 基本参数

切换到用户ivorysql:

su - ivorysql

通过psql连接数据库:

psql

修改监听地址,便于远程连接顺便改一下ivorysql的密码:

alter system set listen_addresses = '*';
alter user ivorysql password '666666';

说明:用户ivorysql是没有密码的,如果不修改密码,可以修改客户端验证方式为trust,来免密登录。

退回root用户,重启服务使设置生效:

systemctl restart ivorysql-1.service

防火墙

如果开启了防火墙,还需要将端口5333开放:

firewall-cmd --zone=public --add-port=5333/tcp --permanent
firewall-cmd --reload

说明:刚初始化好的ivorysql服务默认端口是5333,如果不开放该端口,外部客户端通过ip连接会失败。

客户端连接数据库

连接IvorySQL数据库服务的客户端工具和PostgreSQL的一样。

4.1 psql 连接

操作系统用户ivorysql会话下连接:

[root@Node02 ~]# su - ivorysql 
Last login: Wed Apr 27 23:58:57 CST 2022 on pts/0
-bash-4.2$ psql
psql (14.2)
Type "help" for help.

ivorysql=#

4.2 DBeaver 连接

DBeaver是一个功能比较强大的开源工具,连接配置如下:

yum

4.3 瀚高 developer 连接

瀚高developer是瀚高自主研发的一个工具,除了可以支持瀚高数据库,还支持PostgreSQL以及IvorySQL数据库。连接配置如下:

yum

如果想使用该工具,请关注公众号加入微信群“IvorySQL中国技术交流群”咨询。

卸载

由于我们是通过yum安装的,要卸载建议也使用yum,尽量不要使用rpm,可能会造成卸载不完整。当然了,也可以根据yum安装清单去卸载。

5.1 备份数据

数据目录在/var/lib/ivorysql/ivorysql-1/data下,所以我们将该目录保护好就可以,最好停止服务,做个备份。

5.2 YUM 卸载

首先停止数据库服务:

systemctl stop ivorysql-1.service

先使用“yum history list”确定yum安装的事务ID:

[root@Node02 ~]# yum history list
Loaded plugins: fastestmirror
ID | Login user | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
5 | root <root> | 2022-04-27 12:38 | Install | 11 <
4 | root <root> | 2022-03-26 16:08 | Install | 35 >
3 | root <root> | 2022-03-26 16:07 | I, U | 19
2 | root <root> | 2022-03-26 16:07 | I, U | 73
1 | System <unset> | 2022-03-26 15:59 | Install | 299
history list

可以看到ID为5的是执行安装的事务。执行命令卸载(需将XX替换为“5”):

yum history undo XX

也可以使用下面命令来卸载:

yum remove ivorysql-server

但该命令卸载并不彻底,只卸载了2个依赖,还有8个依赖未能卸载。可以根据是否保留这些依赖而决定是否使用这种方式卸载。

后记

  • 更细化的操作,可以参照postgresql的操作。例如,用initdb直接初始化。

  • 大家还可以参考IvorySQL自带文档: /usr/share/doc/ivorysql1-1.2/README.rpm-dist。

  • 有任何问题,欢迎大家到IvorySQL官方社区仓库:github.com/IvorySQL/IvorySQL 提交issue。

关于IvorySQL

IvorySQL项目是一个具有广泛生态基础和中国特色的PG开源衍生项目,是瀚高公司设计研发的一款具备强大Oracle兼容能力的开源数据库。具备高兼容性和高可用性,并致力于遵守open-source ways。

社区仓库:github.com/IvorySQL/IvorySQL

CSDN: IvorySQL

开源中国:IvorySQL

墨天轮:IvorySQL


通过订阅邮件列表加入IvorySQL社区:

还有,别忘了在Github给我们一个 ⭐

· 1 分钟阅读

硅谷Postgres会议是西海岸最大的PG会议,也是美国乃至全球Postgres年度重要会议之一,于2022年4月7日至8日(PDT)在美国加利福尼亚州圣何塞希尔顿酒店召开。作为面向全球PostgreSQL技术专家、从业者、爱好者的年度技术交流活动,硅谷会议致力于汇集和讨论关于人、Postgres和数据间的关系!会议与主办地硅谷一样极具包容和公平精神,这里汇集了最优秀的演讲者、听众和赞助商,所有人努力为全球Postgres生态系统创造发展机会。

会议现场人数大概有200多人,是疫情以来聚集人数最多的一次线下会议。

社区核心人员Bruce Momjian出席,会议由PostgresConf,Joshua D.Drake, Jim Mlodgenski 等组织。来自中国、美国、加拿大、巴西、西班牙、德国、印度、巴基斯坦等多个国家的人员参与。

瀚高北美研究院兼中国PostgreSQL分会国际顾问委员会秘书长Grant Zhou作为唯一中国代表,将携IvorySQL项目亮相本次会议。

以下是由IvorySQL开源数据库社区为您带来的硅谷Postgres两日会议简报。

部分演讲议题

IvorySQL--一个基于PostgreSQL的兼容Oracle的开源数据库 --by GRANT ZHOU

有很多用户需要将他们的应用程序从Oracle迁移到开放源码的Postgres,但是为了支持新的数据库,用户经常需要重新开发应用程序,这很不方便。如果有一个基于Postgres的数据库,并且兼容大多数Oracle语法和函数,对客户来说就太方便了。然而官方的Postgres项目不接受这种代码提交。毕竟,Postgres是Postgres, Oracle是Oracle。因此,IvorySQL项目团队创建一个Oracle兼容的数据库。

本演讲中介绍了如何基于PG实现与Oracle语法兼容的数据库,并介绍IvorySQL项目。这个项目是一个开源项目(Apache 2.0),由Highgo软件领导,目前已经发布了基于PostgreSQL 14.2版本的IvorySQL 1.2。

同时欢迎大家为这个开源的侧重Oracle兼容性的数据库——IvorySQL做出贡献。

非关系型Postgres --by Bruce Momjian

Postgres一直对关系存储提供强大的支持。然而,在许多情况下,关系存储要么效率低下,要么限制过度。这个演讲展示了Postgres扩展到支持非关系存储的许多方式,特别是在一个数据库字段中存储和索引多个值(甚至是不相关的值)的能力。这种存储可以提高效率和访问的简单性,还可以避免实体-属性-值(eav)存储的缺点。演讲涵盖多个字段多值存储的例子,包括数组、范围类型、几何图形、全文搜索、xml、json和记录。

数字权力和隐私:21世纪的关注--by Andres Arrieta

30多年来,电子前沿基金会一直在保护和争取我们的公民自由。在这30年里发生了很多事情:我们与互联网的关系从根本上发生了改变,然而,在很多方面,我们对互联网如何运作的理解仍然停滞不前。如今,互联网已经成为我们生活中不可或缺的核心部分,我们越来越依赖互联网。虽然我们比以往任何时候都更容易接触到互联网提供的众多礼物,但决策者和执法机构对互联网如何运作的理解仍然滞后。在此期间,电子前沿基金会及其使命已经涵盖了技术带来的好或坏的许多方面,并帮助保护那些受其影响的人,同时确保一个光明的未来,通过创新改善我们的生活。

Andres Arrieta向大家介绍了我们的一些工作、一些关切的领域以及Andres Arrieta认为将有助于我们朝着更美好的未来努力的一些事情。主要是关于数据隐私和消费者权利的理论视角。讨论了隐私的不同方面以及保护个人隐私的选项。

逻辑复制的过去、现在和未来--by Amit Kapila

在这次演讲中,Amit Kapila讲述了逻辑复制在PostgreSQL中是如何发展的。这将解释最近的一些最近的主要增强,比如促进两阶段和正在进行的大型事务的逻辑复制。并分享了Amit Kapila对如何利用该技术为大型企业构建高度可伸缩和可用的数据库解决方案的看法。在那之后,还讨论了在PostgreSQL未来版本中在这个技术领域中讨论的一些重要增强。并且介绍如何增强这项技术,以便将数据从PostgreSQL迁移到其他数据库。

现代原生云应用的传记--by Karthik Ranganathan

现代云原生应用程序过着令人兴奋的生活 - 从它们在云中诞生,到处理巨大的计划外成功,再到在云中断中幸存下来并处理全球客户。在本次演讲中,Yugabyte 首席技术官 Karthik Ranganathan 从数据层的角度介绍了Yugabyte 如何处理双向表级复制和高可用性。

Aurora的亚马逊Babelfish--by chandra pathivada

现在奥罗拉的Babelfish已经上市了。这个演示是关于Babelfish如何帮助客户迁移SQL Server工作负载到Postgres。在这个演示中,chandra pathivada演示了什么是Babelfish, Aurora的内部结构,使用Babelfish的SQL Server dba的Aurora,以及应用程序迁移实验室。

现场照片

p

p

p

p

p

更多详情内容

2022年硅谷Postgres会议官方网址: https://postgresconf.org/conferences/SV2022

关于IvorySQL

IvorySQL项目是一个具有广泛生态基础和中国特色的PG开源衍生项目,是瀚高公司设计研发的一款具备强大Oracle兼容能力的开源数据库。 具备高兼容性和高可用性,并致力于遵守open-source ways。 IvorySQL社区欢迎并赞赏所有类型的贡献,期待您的加入!


通过订阅邮件列表加入IvorySQL社区:

还有,别忘了在Github给我们一个 ⭐

· 1 分钟阅读

Hi~各位朋友们,我们的PostgresWorld Webinars又回来啦!

PostgreSQL在国内数据库的发展过程中承担了非常重要的角色,全球众多数据库产品选择PostgreSQL作为技术发展路线。但是应用程序从Oracle迁移到开源Postgres的问题成为了最大的阻碍,因此我们创建了IvorySQL开源项目,它是基于最新的PostgreSQL 14并具有强大Oracle兼容性的数据库。 然而我们为什么一定要做IvorySQL开源项目?它和Postgres、Oracle技术上有什么区别?本次网络研讨会邀您一起探讨。

本期网络研讨会由Grant Zhou带来《IvorySQL - 一个基于PostgreSQL的兼容Oracle的开源数据库》为主题的分享,共同探讨基于PG并兼容Oracle的开源数据库。

嘉宾介绍

Grant Zhou目前居住在加拿大,他是瀚高北美研究院的负责人,并领导PostgreSQL公司开发团队,团队成员来自加拿大,中国和巴基斯坦。他同时担任PostgreSQL中国分会国际顾问委员会的秘书长,也很自豪能成为PostgresConf的组织者和亚洲联络人。他在阿尔卡特朗讯(诺基亚)公司工作了十多年,在高可用性、实时电信系统、数据库技术和Unix/Linux编程方面拥有丰富的经验。 2021年12月,该团队宣布了IvorySQL数据库的第一个可用版本,这是目前唯一一款基于PostgreSQL、兼容Oracle的开源数据库。2022年2月28日,基于PostgreSQL 14.2发布了IvorySQL 1.2。

研讨会要点介绍

有许多用户需要将他们的应用程序从Oracle迁移到开源Postgres,但是为了支持新的数据库,用户经常需要重新开发应用程序,这很不方便。如果有一个基于Postgres的数据库,并且与大多数Oracle语法和函数兼容,那么对于客户来说就太方便了。 但是,官方的Postgres项目不会接受这种代码提交。毕竟,Postgres是Postgres,Oracle是Oracle。 因此,我们创建了一个具有Oracle兼容功能的开源数据库项目。 本次演讲将介绍如何基于PG实现与Oracle语法兼容的数据库,详细介绍IvorySQL项目的研发过程

时间与链接


Join the IvorySQL community by subscribing to mailing lists:

Also, don't forget to give us a ⭐ on Github

· 1 分钟阅读

Hello

正当全世界都在为节日打包行李,迎接新年的到来时,我们正努力工作,并为我们的团队从2021年初开始的项目做最后的润色。那天是12月15日,就在那天结束之前,我们得到了所有的绿灯,在清理桌子之前,我们默默地发布了IvorySQL的第一个版本。

IvorySQL概览

IvorySQL是Apache 2.0许可的开源Oracle兼容PostgreSQL。IvorySQL的第一个版本源自PostgreSQL 14,它坚定地承诺始终保持100%的PostgreSQL兼容性,并可以直接替换PostgreSQL的最新版本。

IvorySQL在现有标准PostgreSQL配置参数的基础上添加了一个兼容的_db GUC。 compatible_db 是一个切换开关,用于在Oracle和PostgreSQL兼容模式之间切换。IvorySQL的第二大亮点是 PL/iSQL 支持oracle PL/SQL语法的过程语言。这两个新增功能在不破坏标准PostgreSQL兼容性的情况下,是IvorySQL的Oracle兼容性的核心。compatible_db 切换在Oracle和PostgreSQL中存在的函数和对象的行为,并以不同的方式运行,而PL/iSQL 为在最小的更改上运行IORYSQL的Oracle代码奠定了基础。

IvorySQL具有许多与Oracle兼容的功能,包括Oracle风格的PACKAGES, DATA Types, 和 Conversion Functions. 有关IvorySQL中Oracle兼容性功能的详细信息,请参阅 IvorySQL文档

我们致力于遵循开源方式的原则

IvorySQL致力于遵守 open-source ways 我们坚信建设一个健康、包容的社区。我们坚持认为好的想法可以来自任何地方,最好的想法应该获胜。只有包含不同的观点,我们才能做出最佳决策。虽然IvorySQL的第一个版本主要关注Oracle兼容性功能,但未来的路线图和功能集将由社区以开源的方式确定。

为IvorySQL做贡献

有很多方法可以帮助IvorySQL。您可以通过提供文档更新和文档翻译来做出贡献。如果你有设计技能,你可以为IvorySQL网站项目做出贡献。 测试IvorySQL和报告问题,通过发布bug修复或新功能的pull请求,或回答邮件列表上的问题,是对IvorySQL项目做出贡献的一些方式,IvorySQL社区欢迎并赞赏所有类型的贡献。

快速开始

所有与IvorySQL相关的项目,包括数据库服务器、网站和文档,都通过Github托管和管理。您可以通过IvorySQL Github page下载源代码或发布的软件包.

浏览 http://www.ivorysql.org 阅读项目文档和贡献指南。


通过订阅邮件列表加入IvorySQL社区:

还有,别忘了在Github给我们一个 ⭐