Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added CN/modules/ROOT/images/p31.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added CN/modules/ROOT/images/p32.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 5 additions & 1 deletion CN/modules/ROOT/nav.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,12 @@
*** xref:master/4.4.adoc[运维管理指南]
*** xref:master/4.5.adoc[迁移指南]
** IvorySQL生态
*** xref:master/5.1.adoc[PostGIS]
*** xref:master/5.0.adoc[概述]
*** xref:master/5.2.adoc[pgvector]
*** xref:master/5.3.adoc[pgddl(DDL Extractor)]
*** xref:master/5.4.adoc[pg_cron]
*** xref:master/5.5.adoc[pgsql-http]
*** xref:master/5.6.adoc[plpgsql_check]
** IvorySQL架构设计
*** 查询处理
**** xref:master/6.1.1.adoc[双parser]
Expand Down
24 changes: 24 additions & 0 deletions CN/modules/ROOT/pages/master/5.0.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
:sectnums:
:sectnumlevels: 5


[discrete]
== IvorySQL生态插件适配列表

IvorySQL 作为一款兼容 Oracle 且基于 PostgreSQL 的高级开源数据库,具备强大的扩展能力,支持丰富的生态系统插件。这些插件可以帮助用户在不同场景下增强数据库功能,包括地理信息处理、向量检索、全文搜索、数据定义提取和路径规划等。以下是当前 IvorySQL 官方兼容和支持的主要插件列表:

+

[cols="2,1,3,3"]
|====
|*插件名称*|*版本*|*功能描述*|*适用场景*
| xref:master/5.2.adoc[pgvector] | 0.8.1 | 支持向量相似性搜索,可用于存储和检索高维向量数据| AI 应用、图像检索、推荐系统、语义搜索
| xref:master/5.3.adoc[pgddl (DDL Extractor)] | 0.31 | 提取数据库中的 DDL(数据定义语言)语句,便于版本管理和迁移 | 数据库版本控制、CI/CD 集成、结构比对与同步
| xref:master/5.4.adoc[pg_cron]​ | 1.6.0 | 提供数据库内部的定时任务调度功能,支持定期执行SQL语句 | 数据清理、定期统计、自动化维护任务
| xref:master/5.5.adoc[pgsql-http]​ | 1.7.0 | 允许在SQL中发起HTTP请求,与外部Web服务进行交互 | 数据采集、API集成、微服务调用
| xref:master/5.6.adoc[plpgsql_check] | 2.8 | 提供PL/pgSQL代码的静态分析功能,可在开发阶段发现潜在错误 | 存储过程开发、代码质量检查、调试优化
|====

这些插件均经过 IvorySQL 团队的测试和适配,确保在 IvorySQL 环境下稳定运行。用户可以根据业务需求选择合适的插件,进一步提升数据库系统的能力和灵活性。

我们也将持续扩展和丰富 IvorySQL 的插件生态,欢迎社区开发者提交新的插件适配建议或代码贡献。如需了解更多每个插件的详细使用方法和最新兼容版本,请参阅各插件对应的文档章节。
52 changes: 32 additions & 20 deletions CN/modules/ROOT/pages/master/5.2.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -23,38 +23,46 @@ HNSW (Hierarchical Navigating Small World) 是一种基于图的索引算法,
== 安装
[TIP]
====
环境中已经安装了IvorySQL4.5及以上版本,安装路径为/usr/local/ivorysql/ivorysql-4
环境中已经安装了IvorySQL5及以上版本,安装路径为/usr/local/ivorysql/ivorysql-5
====

=== 源码安装

** 设置PG_CONFIG环境变量
```
export PG_CONFIG=/usr/local/ivorysql/ivorysql-4/bin/pg_config
```
+
[literal]
----
export PG_CONFIG=/usr/local/ivorysql/ivorysql-5/bin/pg_config
----

** 拉取pg_vector源码
```
+
[literal]
----
git clone --branch v0.8.1 https://github.com/pgvector/pgvector.git
```
----

** 安装 pgvector
```
+
[literal]
----
cd pgvector

sudo --preserve-env=PG_CONFIG make
sudo --preserve-env=PG_CONFIG make install
```
----

** 创建pgvector扩展
```
[ivorysql@localhost ivorysql-4]$ psql
psql (17.5)
+
[literal]
----
[ivorysql@localhost ivorysql-5]$ psql
psql (18.0)
Type "help" for help.

ivorysql=# create extension vector;
CREATE EXTENSION
```
----
至此,pgvector扩展安装已完成。
更多用例,请参考 https://github.com/pgvector/pgvector?tab=readme-ov-file#getting-started[pgvector文档]

Expand All @@ -66,7 +74,8 @@ CREATE EXTENSION

=== 数据类型

```
[literal]
----
ivorysql=# CREATE TABLE items5 (id bigserial PRIMARY KEY, name varchar2(20), num number(20), embedding bit(3));
CREATE TABLE
ivorysql=# INSERT INTO items5 (name, num, embedding) VALUES ('1st oracle data',0, '000'), ('2nd oracle data', 111, '111');
Expand All @@ -76,11 +85,12 @@ ivorysql=# SELECT * FROM items5 ORDER BY bit_count(embedding # '101') LIMIT 5;
----+-----------------+-----+-----------
2 | 2nd oracle data | 111 | 111
1 | 1st oracle data | 0 | 000
```
----

=== 匿名块

```
[literal]
----
ivorysql=# declare
i vector(3) := '[1,2,3]';
begin
Expand All @@ -89,10 +99,11 @@ end;
ivorysql-# /
NOTICE: [1,2,3]
DO
```
----

=== 存储过程(PROCEDURE)
```
[literal]
----
ivorysql=# CREATE OR REPLACE PROCEDURE ora_procedure()
AS
p vector(3) := '[4,5,6]';
Expand All @@ -104,10 +115,11 @@ CREATE PROCEDURE
ivorysql=# call ora_procedure();
NOTICE: [4,5,6]
CALL
```
----

==== 函数(FUNCTION)
```
[literal]
----
ivorysql=# CREATE OR REPLACE FUNCTION AddVector(a vector(3), b vector(3))
RETURN vector(3)
IS
Expand All @@ -121,4 +133,4 @@ ivorysql=# SELECT AddVector('[1,2,3]','[4,5,6]') FROM DUAL;
----------------
[5,7,9]
(1 row)
```
----
47 changes: 47 additions & 0 deletions CN/modules/ROOT/pages/master/5.3.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@

:sectnums:
:sectnumlevels: 5

= pgddl (DDL Extractor)

== 概述
pgddl 是一个专为 PostgreSQL 数据库设计的 SQL 函数扩展,它能够直接从数据库系统目录中生成清晰、格式化的 SQL DDL (数据定义语言) 脚本,例如 CREATE TABLE 或 ALTER FUNCTION。它解决了 PostgreSQL 原生缺乏类似 SHOW CREATE TABLE 命令的问题,让用户无需借助外部工具(如 pg_dump)即可在纯 SQL 环境中轻松获取对象的创建语句。

该扩展通过一组简单的 SQL 函数提供了一套完整的解决方案,其优势包括:仅需使用 SQL 查询即可操作、支持通过 WHERE 子句灵活筛选对象、并能智能处理对象之间的依赖关系,生成包含 Drop 和 Create 步骤的完整脚本。这使得它特别适用于数据库变更管理、升级脚本编写和结构审计等场景。

需要注意的是,ddlx 仍在发展中,可能尚未覆盖所有 PostgreSQL 对象类型和高级选项。生成的脚本建议始终在非生产环境中先行检查和测试,以确保其正确性与安全性。

== 安装
IvorySQL的安装包里已经集成了pgddl插件,如果使用安装包安装的IvorySQL,通常不需要再手动安装pgddl即可使用。其它安装方式可以参考下面的源码安装步骤。

[TIP]
源码安装环境为 Ubuntu 24.04(x86_64),环境中已经安装了IvorySQL5及以上版本,安装路径为/usr/local/ivorysql/ivorysql-5

=== 源码安装
从https://github.com/lacanoid/pgddl 下载pgddl v0.31代码。

[literal]
----
cd pgddl
# 设置PG_CONFIG环境变量值为pg_config路径,eg:/usr/local/ivorysql/ivorysql-5/bin/pg_config
make PG_CONFIG=/path/to/pg_config
make PG_CONFIG=/path/to/pg_config install
----

== 创建Extension并确认ddlx版本

psql 连接到数据库,执行如下命令:
[literal]
----
ivorysql=# CREATE extension ddlx;
CREATE EXTENSION

ivorysql=# SELECT * FROM pg_available_extensions WHERE name = 'ddlx';
name | default_version | installed_version | comment
------+-----------------+-------------------+-------------------------
ddlx | 0.31 | 0.31 | DDL eXtractor functions
(1 row)
----

== 使用
关于pgddl的使用,请参阅 https://github.com/lacanoid/pgddl[ddlx官方文档]
118 changes: 118 additions & 0 deletions CN/modules/ROOT/pages/master/5.4.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@

:sectnums:
:sectnumlevels: 5
:imagesdir: ./_images

= pg_cron

== 概述
在 PostgreSQL 中运行周期性任务,例如执行 VACUUM或删除旧数据,是一种常见需求。实现这一点的简单方法是配置 cron或其他外部守护进程,使其定期连接到数据库并运行命令。然而,随着数据库越来越多地作为托管服务或独立容器运行,配置和运行一个单独的守护进程通常变得不切实际。此外,很难让您的 cron任务感知故障转移,或者跨集群节点调度任务。

pg_cron 是 PostgreSQL 的开源定时任务扩展,允许直接在数据库内部设置 cron 风格的任务调度,用于自动化数据维护任务(清理,聚合), 数据库健康检查,执行存储过程和自定义函数等操作。它将cron任务存储在表中,周期性任务会随着 PostgreSQL 服务器自动进行故障转移。详情可以参见 https://github.com/citusdata/pg_cron[pg_cron文档]。

== 安装配置

[TIP]
源码安装环境为 Ubuntu 24.04(x86_64),环境中已经安装了IvorySQL5及以上版本,安装路径为/usr/local/ivorysql/ivorysql-5

=== 源码安装

[literal]
----
# 拉取pg_cron源码
git clone https://github.com/citusdata/pg_cron.git
cd pg_cron
# 将pg_config的路径设置到PATH环境变量里,eg:
export PATH=/usr/local/ivorysql/ivorysql-5/bin/:$PATH
make
make install
----

=== 配置文件 (ivorysql.conf)

[literal]
----
# 共享预加载扩展
shared_preload_libraries = 'pg_cron'

# 指定任务元数据存储库(默认当前库)
cron.database_name = 'ivorysql'

# 允许的最大并发任务数
cron.max_running_jobs = 5
----

=== 重启服务

[literal]
----
pg_ctl restart -D ./data -l logfile
----

=== 创建Extension并确认pg_cron版本

psql 连接到数据库,执行如下命令:
[literal]
----
ivorysql=# CREATE extension pg_cron;
CREATE EXTENSION

ivorysql=# SELECT * FROM pg_available_extensions WHERE name = 'pg_cron';
name | default_version | installed_version | comment
---------+-----------------+-------------------+---------------------------
pg_cron | 1.6 | |Job scheduler for PostgreSQL
(1 row)
----

== 核心功能使用

=== 创建定时任务

[literal]
----
SELECT cron.schedule(
'nightly-data-cleanup', -- 任务名称(唯一标识)
'0 3 * * *', -- cron表达式(每天UTC 3:00)
$$DELETE FROM logs
WHERE created_at < now() - interval '30 days'$$ -- 执行SQL
);
----

cron表达式速查表:

|====
|示例|含义
|'0 * * * *'|每小时整点执行
|'*/15 * * * *'|每15分钟执行
|'0 9 * * 1-5'|工作日早9点执行
|'0 1 1 * *'|每月1日凌晨1点执行
|====

pg_cron还允许使用 '$'表示月份的最后一天。

=== 任务管理

[literal]
----
# 查看所有任务
SELECT * FROM cron.job;
----

image::p31.png[]

[literal]
----
# 查看任务执行历史
SELECT * FROM cron.job_run_details ORDER BY start_time DESC LIMIT 10;
----

image::p32.png[]

[literal]
----
# 删除任务
SELECT cron.unschedule('nightly-data-cleanup');

# 暂停任务(更新状态)
UPDATE cron.job SET active = false WHERE jobname = 'delete-job-run-details';
----
59 changes: 59 additions & 0 deletions CN/modules/ROOT/pages/master/5.5.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@

:sectnums:
:sectnumlevels: 5

= pgsql-http

== 概述
pgsql-http 是一个为 PostgreSQL 数据库设计的开源扩展,它允许用户直接在数据库内部发起 HTTP 请求,扮演了一个内置 Web 客户端的角色。该扩展的核心目的是打通数据库与外部 Web 服务之间的壁垒,使得通过简单的 SQL 函数调用即可与外部 Web 服务、API 端点进行交互,无需依赖外部应用程序或中间件。

借助此扩展,开发者可以在 SQL 查询、触发器或存储过程中直接获取网络数据(GET)、提交数据(POST/PUT)、更新(PATCH)或删除(DELETE)远程资源。它提供了丰富的功能,包括设置请求头、自动处理 URL 编码、发送 JSON 数据以及解析响应状态、头部和内容,极大简化了将外部数据集成到数据库操作中的流程。

其典型应用场景包括:实时获取外部数据(如汇率、天气信息)并存入表;在数据变更时通过触发器自动通知微服务;对数据库中的数据进行清洗后直接提交至外部 API 等。它为构建以数据库为中心的集成应用提供了强大而灵活的解决方案。

== 安装
IvorySQL的安装包里已经集成了pgsql-http插件,如果使用安装包安装的IvorySQL,通常不需要再手动安装pgsql-http即可使用。其它安装方式可以参考下面的源码安装步骤。

[TIP]
源码安装环境为 Ubuntu 24.04(x86_64),环境中已经安装了IvorySQL5及以上版本,安装路径为/usr/local/ivorysql/ivorysql-5

=== 源码安装

** 安装依赖

对libcurl有依赖,libcurl的开发文件(例如 libcurl4-openssl-dev)需要提前安装上
[literal]
----
#安装依赖
sudo apt install libcurl4-openssl-dev
----

** 编译安装

从https://github.com/pramsey/pgsql-http/releases/tag/v1.7.0 下载 1.7.0的源码包 pgsql-http-1.7.0.tar.gz
[literal]
----
tar xvf pgsql-http-1.7.0.tar.gz
cd pgsql-http-1.7.0
# 确保pg_config在PATH里可以访问,eg: /usr/local/ivorysql/ivorysql-5/bin/pg_config
make
sudo make install
----

== 创建Extension并确认http版本

psql 连接到数据库,执行如下命令:
[literal]
----
ivorysql=# CREATE extension http;
CREATE EXTENSION

ivorysql=# SELECT * FROM pg_available_extensions WHERE name = 'http';
name | default_version | installed_version | comment
-----------+-----------------+-------------------+-------------------------------------------------------------------------
http | 1.7 | 1.7 | HTTP client for PostgreSQL, allows web page retrieval inside the database.
(1 row)
----

== 使用
关于pgsql-http的使用,请参阅 https://github.com/pramsey/pgsql-http[pgsql-http官方文档]
Loading