Skip to content

Commit 565ffdc

Browse files
committed
add document for 4 newly adapted pg extensions and overview
1 parent b03f58e commit 565ffdc

File tree

16 files changed

+662
-3
lines changed

16 files changed

+662
-3
lines changed

CN/modules/ROOT/images/p31.png

79 KB
Loading

CN/modules/ROOT/images/p32.png

193 KB
Loading

CN/modules/ROOT/nav.adoc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,12 @@
1313
*** xref:master/4.4.adoc[运维管理指南]
1414
*** xref:master/4.5.adoc[迁移指南]
1515
** IvorySQL生态
16-
*** xref:master/5.1.adoc[PostGIS]
16+
*** xref:master/5.0.adoc[概述]
1717
*** xref:master/5.2.adoc[pgvector]
18+
*** xref:master/5.3.adoc[pgddl(DDL Extractor)]
19+
*** xref:master/5.4.adoc[pg_cron]
20+
*** xref:master/5.5.adoc[pgsql-http]
21+
*** xref:master/5.6.adoc[plpgsql_check]
1822
** IvorySQL架构设计
1923
*** 查询处理
2024
**** xref:master/6.1.1.adoc[双parser]
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
:sectnums:
2+
:sectnumlevels: 5
3+
4+
5+
[discrete]
6+
== IvorySQL生态插件适配列表
7+
8+
IvorySQL 作为一款兼容 Oracle 且基于 PostgreSQL 的高级开源数据库,具备强大的扩展能力,支持丰富的生态系统插件。这些插件可以帮助用户在不同场景下增强数据库功能,包括地理信息处理、向量检索、全文搜索、数据定义提取和路径规划等。以下是当前 IvorySQL 官方兼容和支持的主要插件列表:
9+
10+
+
11+
12+
[cols="2,1,3,3"]
13+
|====
14+
|*插件名称*|*版本*|*功能描述*|*适用场景*
15+
| xref:master/5.2.adoc[pgvector] | 0.8.1 | 支持向量相似性搜索,可用于存储和检索高维向量数据| AI 应用、图像检索、推荐系统、语义搜索
16+
| xref:master/5.3.adoc[pgddl (DDL Extractor)] | 0.31 | 提取数据库中的 DDL(数据定义语言)语句,便于版本管理和迁移 | 数据库版本控制、CI/CD 集成、结构比对与同步
17+
| xref:master/5.4.adoc[pg_cron]​ | 1.6.0 | 提供数据库内部的定时任务调度功能,支持定期执行SQL语句 | 数据清理、定期统计、自动化维护任务
18+
| xref:master/5.5.adoc[pgsql-http]​ | 1.7.0 | 允许在SQL中发起HTTP请求,与外部Web服务进行交互 | 数据采集、API集成、微服务调用
19+
| xref:master/5.6.adoc[plpgsql_check] | 2.8 | 提供PL/pgSQL代码的静态分析功能,可在开发阶段发现潜在错误 | 存储过程开发、代码质量检查、调试优化
20+
|====
21+
22+
这些插件均经过 IvorySQL 团队的测试和适配,确保在 IvorySQL 环境下稳定运行。用户可以根据业务需求选择合适的插件,进一步提升数据库系统的能力和灵活性。
23+
24+
我们也将持续扩展和丰富 IvorySQL 的插件生态,欢迎社区开发者提交新的插件适配建议或代码贡献。如需了解更多每个插件的详细使用方法和最新兼容版本,请参阅各插件对应的文档章节。
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
2+
:sectnums:
3+
:sectnumlevels: 5
4+
5+
= pgddl (DDL Extractor)
6+
7+
== 概述
8+
pgddl 是一个专为 PostgreSQL 数据库设计的 SQL 函数扩展,它能够直接从数据库系统目录中生成清晰、格式化的 SQL DDL (数据定义语言) 脚本,例如 CREATE TABLE 或 ALTER FUNCTION。它解决了 PostgreSQL 原生缺乏类似 SHOW CREATE TABLE 命令的问题,让用户无需借助外部工具(如 pg_dump)即可在纯 SQL 环境中轻松获取对象的创建语句。
9+
10+
该扩展通过一组简单的 SQL 函数提供了一套完整的解决方案,其优势包括:仅需使用 SQL 查询即可操作、支持通过 WHERE 子句灵活筛选对象、并能智能处理对象之间的依赖关系,生成包含 Drop 和 Create 步骤的完整脚本。这使得它特别适用于数据库变更管理、升级脚本编写和结构审计等场景。
11+
12+
需要注意的是,ddlx 仍在发展中,可能尚未覆盖所有 PostgreSQL 对象类型和高级选项。生成的脚本建议始终在非生产环境中先行检查和测试,以确保其正确性与安全性。
13+
14+
== 安装
15+
IvorySQL的安装包里已经集成了pgddl插件,如果使用安装包安装的IvorySQL,通常不需要再手动安装pgddl即可使用。其它安装方式可以参考下面的源码安装步骤。
16+
17+
[TIP]
18+
源码安装环境为 Ubuntu 24.04(x86_64),环境中已经安装了IvorySQL5及以上版本,安装路径为/usr/local/ivorysql/ivorysql-5
19+
20+
=== 源码安装
21+
从https://github.com/lacanoid/pgddl 下载pgddl v0.31代码。
22+
23+
[literal]
24+
----
25+
cd pgddl
26+
# 设置PG_CONFIG环境变量值为pg_config路径,eg:/usr/local/ivorysql/ivorysql-5/bin/pg_config
27+
make PG_CONFIG=/path/to/pg_config
28+
make PG_CONFIG=/path/to/pg_config install
29+
----
30+
31+
== 创建Extension并确认ddlx版本
32+
33+
psql 连接到数据库,执行如下命令:
34+
[literal]
35+
----
36+
ivorysql=# CREATE extension ddlx;
37+
CREATE EXTENSION
38+
39+
ivorysql=# SELECT * FROM pg_available_extensions WHERE name = 'ddlx';
40+
name | default_version | installed_version | comment
41+
------+-----------------+-------------------+-------------------------
42+
ddlx | 0.31 | 0.31 | DDL eXtractor functions
43+
(1 row)
44+
----
45+
46+
== 使用
47+
关于pgddl的使用,请参阅 https://github.com/lacanoid/pgddl[ddlx官方文档]
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
2+
:sectnums:
3+
:sectnumlevels: 5
4+
:imagesdir: ./_images
5+
6+
= pg_cron
7+
8+
== 概述
9+
在 PostgreSQL 中运行周期性任务,例如执行 VACUUM或删除旧数据,是一种常见需求。实现这一点的简单方法是配置 cron或其他外部守护进程,使其定期连接到数据库并运行命令。然而,随着数据库越来越多地作为托管服务或独立容器运行,配置和运行一个单独的守护进程通常变得不切实际。此外,很难让您的 cron任务感知故障转移,或者跨集群节点调度任务。
10+
11+
pg_cron 是 PostgreSQL 的开源定时任务扩展,允许直接在数据库内部设置 cron 风格的任务调度,用于自动化数据维护任务(清理,聚合), 数据库健康检查,执行存储过程和自定义函数等操作。它将cron任务存储在表中,周期性任务会随着 PostgreSQL 服务器自动进行故障转移。详情可以参见 https://github.com/citusdata/pg_cron[pg_cron文档]。
12+
13+
== 安装配置
14+
15+
[TIP]
16+
源码安装环境为 Ubuntu 24.04(x86_64),环境中已经安装了IvorySQL5及以上版本,安装路径为/usr/local/ivorysql/ivorysql-5
17+
18+
=== 源码安装
19+
20+
[literal]
21+
----
22+
# 拉取pg_cron源码
23+
git clone https://github.com/citusdata/pg_cron.git
24+
cd pg_cron
25+
# 将pg_config的路径设置到PATH环境变量里,eg:
26+
export PATH=/usr/local/ivorysql/ivorysql-5/bin/:$PATH
27+
make
28+
make install
29+
----
30+
31+
=== 配置文件 (ivorysql.conf)
32+
33+
[literal]
34+
----
35+
# 共享预加载扩展
36+
shared_preload_libraries = 'pg_cron'
37+
38+
# 指定任务元数据存储库(默认当前库)
39+
cron.database_name = 'ivorysql'
40+
41+
# 允许的最大并发任务数
42+
cron.max_running_jobs = 5
43+
----
44+
45+
=== 重启服务
46+
47+
[literal]
48+
----
49+
pg_ctl restart -D ./data -l logfile
50+
----
51+
52+
=== 创建Extension并确认pg_cron版本
53+
54+
psql 连接到数据库,执行如下命令:
55+
[literal]
56+
----
57+
ivorysql=# CREATE extension pg_cron;
58+
CREATE EXTENSION
59+
60+
ivorysql=# SELECT * FROM pg_available_extensions WHERE name = 'pg_cron';
61+
name | default_version | installed_version | comment
62+
---------+-----------------+-------------------+---------------------------
63+
pg_cron | 1.6 | |Job scheduler for PostgreSQL
64+
(1 row)
65+
----
66+
67+
== 核心功能使用
68+
69+
=== 创建定时任务
70+
71+
[literal]
72+
----
73+
SELECT cron.schedule(
74+
'nightly-data-cleanup', -- 任务名称(唯一标识)
75+
'0 3 * * *', -- cron表达式(每天UTC 3:00)
76+
$$DELETE FROM logs
77+
WHERE created_at < now() - interval '30 days'$$ -- 执行SQL
78+
);
79+
----
80+
81+
cron表达式速查表:
82+
83+
|====
84+
|示例|含义
85+
|'0 * * * *'|每小时整点执行
86+
|'*/15 * * * *'|每15分钟执行
87+
|'0 9 * * 1-5'|工作日早9点执行
88+
|'0 1 1 * *'|每月1日凌晨1点执行
89+
|====
90+
91+
pg_cron还允许使用 '$'表示月份的最后一天。
92+
93+
=== 任务管理
94+
95+
[literal]
96+
----
97+
# 查看所有任务
98+
SELECT * FROM cron.job;
99+
----
100+
101+
image::p31.png[]
102+
103+
[literal]
104+
----
105+
# 查看任务执行历史
106+
SELECT * FROM cron.job_run_details ORDER BY start_time DESC LIMIT 10;
107+
----
108+
109+
image::p32.png[]
110+
111+
[literal]
112+
----
113+
# 删除任务
114+
SELECT cron.unschedule('nightly-data-cleanup');
115+
116+
# 暂停任务(更新状态)
117+
UPDATE cron.job SET active = false WHERE jobname = 'delete-job-run-details';
118+
----
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
2+
:sectnums:
3+
:sectnumlevels: 5
4+
5+
= pgsql-http
6+
7+
== 概述
8+
pgsql-http 是一个为 PostgreSQL 数据库设计的开源扩展,它允许用户直接在数据库内部发起 HTTP 请求,扮演了一个内置 Web 客户端的角色。该扩展的核心目的是打通数据库与外部 Web 服务之间的壁垒,使得通过简单的 SQL 函数调用即可与外部 Web 服务、API 端点进行交互,无需依赖外部应用程序或中间件。
9+
10+
借助此扩展,开发者可以在 SQL 查询、触发器或存储过程中直接获取网络数据(GET)、提交数据(POST/PUT)、更新(PATCH)或删除(DELETE)远程资源。它提供了丰富的功能,包括设置请求头、自动处理 URL 编码、发送 JSON 数据以及解析响应状态、头部和内容,极大简化了将外部数据集成到数据库操作中的流程。
11+
12+
其典型应用场景包括:实时获取外部数据(如汇率、天气信息)并存入表;在数据变更时通过触发器自动通知微服务;对数据库中的数据进行清洗后直接提交至外部 API 等。它为构建以数据库为中心的集成应用提供了强大而灵活的解决方案。
13+
14+
== 安装
15+
IvorySQL的安装包里已经集成了pgsql-http插件,如果使用安装包安装的IvorySQL,通常不需要再手动安装pgsql-http即可使用。其它安装方式可以参考下面的源码安装步骤。
16+
17+
[TIP]
18+
源码安装环境为 Ubuntu 24.04(x86_64),环境中已经安装了IvorySQL5及以上版本,安装路径为/usr/local/ivorysql/ivorysql-5
19+
20+
=== 源码安装
21+
22+
** 安装依赖
23+
24+
对libcurl有依赖,libcurl的开发文件(例如 libcurl4-openssl-dev)需要提前安装上
25+
[literal]
26+
----
27+
#安装依赖
28+
sudo apt install libcurl4-openssl-dev
29+
----
30+
31+
** 编译安装
32+
33+
从https://github.com/pramsey/pgsql-http/releases/tag/v1.7.0 下载 1.7.0的源码包 pgsql-http-1.7.0.tar.gz
34+
[literal]
35+
----
36+
tar xvf pgsql-http-1.7.0.tar.gz
37+
cd pgsql-http-1.7.0
38+
# 确保pg_config在PATH里可以访问,eg: /usr/local/ivorysql/ivorysql-5/bin/pg_config
39+
make
40+
sudo make install
41+
----
42+
43+
== 创建Extension并确认http版本
44+
45+
psql 连接到数据库,执行如下命令:
46+
[literal]
47+
----
48+
ivorysql=# CREATE extension http;
49+
CREATE EXTENSION
50+
51+
ivorysql=# SELECT * FROM pg_available_extensions WHERE name = 'http';
52+
name | default_version | installed_version | comment
53+
-----------+-----------------+-------------------+-------------------------------------------------------------------------
54+
http | 1.7 | 1.7 | HTTP client for PostgreSQL, allows web page retrieval inside the database.
55+
(1 row)
56+
----
57+
58+
== 使用
59+
关于pgsql-http的使用,请参阅 https://github.com/pramsey/pgsql-http[pgsql-http官方文档]
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
2+
:sectnums:
3+
:sectnumlevels: 5
4+
5+
= plpgsql_check
6+
7+
== 概述
8+
在 PostgreSQL 数据库开发过程中,编写存储过程和函数时往往难以在运行前发现代码中的语法错误、类型不匹配、未定义变量等潜在问题。传统方式需要等到函数实际执行时才能发现这些错误,这不仅增加了调试成本,也可能在生产环境中引发意外故障。
9+
10+
plpgsql_check 是一个专为 PostgreSQL 的 PL/pgSQL 语言设计的静态代码分析工具(Linter),它能够在不实际执行函数的情况下,对存储过程和函数的源代码进行深度检查。该工具可以提前发现语法错误、类型不匹配、未使用的变量、性能问题、安全隐患等多种代码质量问题,帮助开发者在开发阶段就确保代码的正确性和健壮性。详情可以参见 https://github.com/okbob/plpgsql_check[plpgsql_check官方文档]。
11+
12+
== 安装
13+
14+
[TIP]
15+
源码安装环境为 Ubuntu 24.04(x86_64),环境中已经安装了IvorySQL5及以上版本,安装路径为/usr/local/ivorysql/ivorysql-5
16+
17+
=== 源码安装
18+
19+
[literal]
20+
----
21+
# 从https://github.com/okbob/plpgsql_check/releases/tag/v2.8.3 下载 2.8.3的源码包 plpgsql_check-2.8.3.tar.gz
22+
tar xvf plpgsql_check-2.8.3.tar.gz
23+
cd plpgsql_check-2.8.3
24+
# 将pg_config的路径设置到PATH环境变量里,eg:
25+
export PATH=/usr/local/ivorysql/ivorysql-5/bin/:$PATH
26+
make USE_PGXS=1 clean
27+
make USE_PGXS=1 all
28+
sudo make USE_PGXS=1 install
29+
----
30+
31+
== 创建Extension并确认plpgsql_check版本
32+
33+
psql 连接到数据库,执行如下命令:
34+
[literal]
35+
----
36+
ivorysql=# CREATE EXTENSION plpgsql_check;
37+
CREATE EXTENSION
38+
39+
ivorysql=# SELECT * FROM pg_available_extensions WHERE name = 'plpgsql_check';
40+
name | default_version | installed_version | comment
41+
---------------+-----------------+-------------------+---------------------------------------------------
42+
plpgsql_check | 2.8 | 2.8 | extended check for plpgsql functions
43+
(1 row)
44+
----
45+
46+
== 使用
47+
48+
=== 检查单个函数
49+
50+
[literal]
51+
----
52+
-- 创建一个示例函数
53+
CREATE OR REPLACE FUNCTION test_function(p_id integer)
54+
RETURNS text AS $$
55+
DECLARE
56+
v_name text;
57+
v_unused integer; -- 未使用的变量
58+
BEGIN
59+
SELECT name INTO v_name FROM users WHERE id = p_id;
60+
RETURN v_naem; -- 拼写错误
61+
END;
62+
$$ LANGUAGE plpgsql;
63+
64+
-- 使用 plpgsql_check 检查函数
65+
SELECT * FROM plpgsql_check_function('test_function(integer)');
66+
----
67+
68+
检查结果示例:
69+
[literal]
70+
----
71+
plpgsql_check_function
72+
--------------------------------------------------------------
73+
error:42601:7:assignment:target variable "v_naem" is undefined
74+
warning:00000:4:DECLARE:unused variable "v_unused"
75+
(2 rows)
76+
----
77+
78+
更多详细使用方法和高级特性,请参阅 https://github.com/okbob/plpgsql_check[plpgsql_check官方文档]。
79+

EN/modules/ROOT/images/p31.png

79 KB
Loading

EN/modules/ROOT/images/p32.png

193 KB
Loading

0 commit comments

Comments
 (0)