Skip to content

Commit a9d2522

Browse files
authored
Merge branch 'master' into postgis
2 parents d307783 + 2fb11a9 commit a9d2522

File tree

26 files changed

+1830
-12
lines changed

26 files changed

+1830
-12
lines changed

CN/modules/ROOT/nav.adoc

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020
*** xref:master/5.4.adoc[pg_cron]
2121
*** xref:master/5.5.adoc[pgsql-http]
2222
*** xref:master/5.6.adoc[plpgsql_check]
23+
*** xref:master/5.7.adoc[pgroonga]
24+
*** xref:master/5.8.adoc[pgaudit]
25+
*** xref:master/5.9.adoc[pgrouting]
26+
*** xref:master/5.10.adoc[system_stats]
2327
** IvorySQL架构设计
2428
*** 查询处理
2529
**** xref:master/6.1.1.adoc[双parser]
@@ -36,7 +40,8 @@
3640
**** xref:master/6.3.8.adoc[Force View]
3741
**** xref:master/6.3.9.adoc[大小写转换]
3842
**** xref:master/6.3.10.adoc[sys_guid 函数]
39-
*** xref:master/6.4.adoc[国标GB18030]
43+
**** xref:master/6.3.11.adoc[空字符串转null]
44+
**** xref:master/6.3.12.adoc[CALL INTO]
4045
*** 内置函数
4146
**** xref:master/6.4.1.adoc[sys_context]
4247
**** xref:master/6.4.2.adoc[userenv]
@@ -62,6 +67,8 @@
6267
*** xref:master/7.18.adoc[18、Force View]
6368
*** xref:master/7.19.adoc[19、嵌套子函数]
6469
*** xref:master/7.20.adoc[20、sys_guid 函数]
70+
*** xref:master/7.21.adoc[21、空字符串转null]
71+
*** xref:master/7.22.adoc[22、CALL INTO]
6572
** IvorySQL贡献指南
6673
*** xref:master/8.1.adoc[社区贡献指南]
6774
*** xref:master/8.2.adoc[asciidoc语法快速参考]

CN/modules/ROOT/pages/master/5.0.adoc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,11 @@ IvorySQL 作为一款兼容 Oracle 且基于 PostgreSQL 的高级开源数据库
1818
| xref:master/5.4.adoc[pg_cron]​ | 1.6.0 | 提供数据库内部的定时任务调度功能,支持定期执行SQL语句 | 数据清理、定期统计、自动化维护任务
1919
| xref:master/5.5.adoc[pgsql-http]​ | 1.7.0 | 允许在SQL中发起HTTP请求,与外部Web服务进行交互 | 数据采集、API集成、微服务调用
2020
| xref:master/5.6.adoc[plpgsql_check] | 2.8 | 提供PL/pgSQL代码的静态分析功能,可在开发阶段发现潜在错误 | 存储过程开发、代码质量检查、调试优化
21+
| xref:master/5.7.adoc[pgroonga] | 4.0.4 | 提供​非英语语言全文搜索功能,满足高性能应用的需求 | 中日韩等语言的全文搜索功能
22+
| xref:master/5.8.adoc[pgaudit] | 18.0 | 提供细粒度的审计功能,记录数据库操作日志,便于安全审计和合规性检查 | 数据库安全审计、合规性检查、审计报告生成
23+
| xref:master/5.9.adoc[pgrouting] | 3.8.0 | 提供地理空间数据的路由计算功能,支持多种算法和数据格式 | 地理空间分析、路径规划、物流优化
2124
|====
2225

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

25-
我们也将持续扩展和丰富 IvorySQL 的插件生态,欢迎社区开发者提交新的插件适配建议或代码贡献。如需了解更多每个插件的详细使用方法和最新兼容版本,请参阅各插件对应的文档章节。
28+
我们也将持续扩展和丰富 IvorySQL 的插件生态,欢迎社区开发者提交新的插件适配建议或代码贡献。如需了解更多每个插件的详细使用方法和最新兼容版本,请参阅各插件对应的文档章节。
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
2+
:sectnums:
3+
:sectnumlevels: 5
4+
5+
= system_stats
6+
7+
== 概述
8+
system_stats 是一个 PostgreSQL 扩展,提供用于访问系统级统计信息的函数,可用于监控场景。
9+
10+
== 安装
11+
12+
[TIP]
13+
源码安装环境为 Ubuntu 24.04(x86_64),环境中已经安装了IvorySQL5及以上版本,安装路径为/usr/local/ivorysql/ivorysql-5
14+
15+
=== 源码安装
16+
17+
[literal]
18+
----
19+
# 从 https://github.com/EnterpriseDB/system_stats/releases/tag/v3.2 下载 3.2 的源码包 v3.2.zip
20+
unzip v3.2.zip
21+
cd system_stats-3.2
22+
23+
# 编译安装插件
24+
make PG_CONFIG=/usr/local/ivorysql/ivorysql-5/bin/pg_config
25+
make PG_CONFIG=/usr/local/ivorysql/ivorysql-5/bin/pg_config install
26+
----
27+
28+
== 创建插件并确认版本
29+
30+
psql 连接到数据库,执行如下命令:
31+
[literal]
32+
----
33+
ivorysql=# CREATE EXTENSION system_stats;
34+
CREATE EXTENSION
35+
36+
ivorysql=# SELECT * FROM pg_available_extensions WHERE name = 'system_stats';
37+
name | default_version | installed_version | comment
38+
--------------+-----------------+-------------------+-----------------------------------------------
39+
system_stats | 3.0 | 3.0 | EnterpriseDB system statistics for PostgreSQL
40+
(1 row)
41+
----
42+
43+
== 使用
44+
45+
[literal]
46+
----
47+
ivorysql=> select pg_sys_os_info() from dual;
48+
pg_sys_os_info
49+
--------------------------------------------------------------------------
50+
("""Ubuntu 24.04.1 LTS"" +
51+
","Linux 6.14.0-29-generic",Ubuntu,"(none)",5568,292,532,x86_64,,864122)
52+
(1 row)
53+
54+
55+
56+
ivorysql=> select pg_sys_cpu_info() from dual;
57+
pg_sys_cpu_info
58+
-------------------------------------------------------------------------------------------------------------------------------------
59+
(GenuineIntel,"GenuineIntel model 154 family 6","12th Gen Intel(R) Core(TM) i7-1260P",,0,2,1,x86_64,2496000000,,,,48,32,1280,18432)
60+
(1 row)
61+
62+
63+
ivorysql=> select pg_sys_cpu_usage_info() from dual;
64+
pg_sys_cpu_usage_info
65+
-----------------------
66+
(0,0,0,100,0,0,0,,,,)
67+
(1 row)
68+
69+
70+
ivorysql=> select pg_sys_memory_info() from dual;
71+
pg_sys_memory_info
72+
-----------------------------------------------------------------------------------
73+
(4055482368,3911159808,144322560,4055887872,233725952,3822161920,2638602240,,,,,)
74+
(1 row)
75+
76+
77+
ivorysql=> select pg_sys_io_analysis_info() from dual;
78+
pg_sys_io_analysis_info
79+
---------------------------------------------------------------
80+
(loop0,15,0,21504,0,1,0)
81+
(loop1,1362,0,27916288,0,680,0)
82+
(loop2,175,0,3354624,0,131,0)
83+
(loop3,141,0,1827840,0,83,0)
84+
(loop4,918,0,32752640,0,212,0)
85+
(loop5,156,0,2617344,0,67,0)
86+
(loop6,3707,0,131992576,0,828,0)
87+
(loop7,243,0,4321280,0,95,0)
88+
(fd0,0,0,0,0,0,0)
89+
(sda,639286,1580583,26547332096,240138948608,402702,2744653)
90+
(sda1,561,0,22966272,0,61,0)
91+
(sda2,636820,1580583,26491053056,240138948608,402316,2744653)
92+
(sr0,87,0,3219456,0,45,0)
93+
(sr1,0,0,0,0,0,0)
94+
(loop8,228,0,2491392,0,120,0)
95+
(loop10,2333,0,36571136,0,1628,0)
96+
(loop9,3730,0,66532352,0,3973,0)
97+
(loop11,87,0,709632,0,50,0)
98+
(loop12,156,0,1948672,0,52,0)
99+
(loop14,2579,0,97446912,0,2083,0)
100+
(loop13,30,0,102400,0,14,0)
101+
(loop15,82,0,1189888,0,117,0)
102+
(loop16,1357,0,28335104,0,500,0)
103+
(loop17,110,0,2187264,0,93,0)
104+
(loop18,129,0,2355200,0,28,0)
105+
(loop19,110,0,2202624,0,55,0)
106+
(26 rows)
107+
108+
109+
ivorysql=> select pg_sys_disk_info() from dual;
110+
pg_sys_disk_info
111+
----------------------------------------------------------------------------------
112+
(/,/dev/sda2,,,ext4,105086115840,50903396352,48797392896,6553600,619735,5933865)
113+
(1 row)
114+
115+
116+
ivorysql=> select pg_sys_load_avg_info() from dual;
117+
pg_sys_load_avg_info
118+
----------------------
119+
(0,0,0,)
120+
(1 row)
121+
122+
123+
ivorysql=> select pg_sys_process_info() from dual;
124+
pg_sys_process_info
125+
---------------------
126+
(294,1,201,0,0)
127+
(1 row)
128+
129+
130+
ivorysql=> select pg_sys_network_info() from dual;
131+
pg_sys_network_info
132+
-----------------------------------------------------------------------------
133+
(lo,127.0.0.1,1071575,5643,0,0,1071575,5643,0,0,0)
134+
(ens33,192.168.198.128,619877515,1490961,0,161,5540250106,4345449,0,0,1000)
135+
(2 rows)
136+
137+
138+
ivorysql=> select pg_sys_cpu_memory_by_process() from dual;
139+
pg_sys_cpu_memory_by_process
140+
-----------------------------------------------------------------------
141+
(1,"(systemd)",864793,0,0.34,13840384)
142+
(2,"(kthreadd)",864793,0,0,0)
143+
(3,"(pool_workqueue_release)",864793,0,0,0)
144+
(4,"(kworker/R-rcu_gp)",864793,0,0,0)
145+
......
146+
----
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
2+
:sectnums:
3+
:sectnumlevels: 5
4+
5+
= PGroonga
6+
7+
== 概述
8+
PostgreSQL 内置了全文搜索功能,但在处理​​大规模数据​​、​​复杂查询​​以及​​非英语语言(特别是中日韩等 CJK 语言)​​ 时,其功能和性能可能无法满足高性能应用的需求。
9+
10+
PGroonga 应运而生,它是一个 PostgreSQL 的扩展插件,将 ​​Groonga​​ 这款高性能的全功能全文搜索引擎与 PostgreSQL 数据库深度融合。Groonga 本身是一个优秀的开源搜索引擎,以其极致的速度和丰富的功能著称,尤其擅长处理多语言文本。PGroonga 的使命就是将 Groonga 的强大能力无缝地带入 PostgreSQL 的世界,为用户提供远超原生全文搜索的体验。
11+
12+
== 安装
13+
[NOTE]
14+
IvorySQL的安装包里已经集成了PGroonga插件,如果使用安装包安装的IvorySQL,通常不需要再手动安装PGroonga,直接跳过安装步骤即可。
15+
16+
用户可从 https://pgroonga.github.io/install[PGroonga package安装] 页面选择适合自己的方式进行PGroonga安装。
17+
18+
IvorySQL社区提供了源码安装步骤,下面以PGroonga v4.0.4为例进行演示。
19+
20+
=== 安装依赖
21+
22+
环境
23+
```
24+
操作系统:Ubuntu 24.04
25+
CPU架构:x86_64
26+
IvorySQL: v5.0
27+
```
28+
29+
==== 安装 msgpack-c
30+
31+
编译PGroonga,有个配置选项:HAVE_MSGPACK=1,它是用于支持WAL,使用这个选项需要安装msgpack-c 1.4.1或者更高版本。
32+
33+
```
34+
sudo apt install libmsgpack-dev
35+
```
36+
==== 安装 Groonga
37+
38+
确保Groonga >= 14.0.0
39+
40+
```
41+
sudo apt install groonga libgroonga-dev
42+
```
43+
验证Groonga安装成功
44+
```bash
45+
highgo@ubuntu:~/work/IvorySQL/inst$ groonga --version
46+
Groonga 15.1.7 [Linux,x86_64,utf8,match-escalation-threshold=0,nfkc,mecab,message-pack,mruby,onigmo,zlib,lz4,zstandard,epoll,apache-arrow,xxhash,blosc,h3,simdjson,llama.cpp]
47+
```
48+
49+
50+
=== 编译安装PGroonga
51+
52+
==== 下载解压源码
53+
54+
```bash
55+
wget https://packages.groonga.org/source/pgroonga/pgroonga-4.0.4.tar.gz
56+
tar xvf pgroonga-4.0.4.tar.gz
57+
cd pgroonga-4.0.4
58+
```
59+
==== 编译
60+
运行make前确保`pg_config`命令的路径在`PATH`环境变量里,例如IvorySQL安装的路径是`~/work/IvorySQL/inst`,则环境变量设置如下:
61+
62+
```bash
63+
export PGHOME=~/work/IvorySQL/inst
64+
export PGDATA=$PGHOME/data
65+
export PATH=$PGHOME/bin:$PATH
66+
```
67+
然后执行以下命令进行编译和安装:
68+
```bash
69+
make HAVE_MSGPACK=1
70+
make install
71+
```
72+
73+
== 创建Extension并确认PGroonga版本
74+
75+
76+
psql 连接到数据库的pg模式下,执行命令:
77+
```sql
78+
postgres=# CREATE extension pgroonga;
79+
CREATE EXTENSION
80+
postgres=# SELECT * FROM pg_available_extensions WHERE name = 'pgroonga';
81+
name | default_version | installed_version | comment
82+
----------+-----------------+-------------------+--------------------------------------------------------------------------------
83+
pgroonga | 4.0.4 | 4.0.4 | Super fast and all languages supported full text search index based on Groonga
84+
(1 row)
85+
86+
postgres=# select version();
87+
version
88+
--------------------------------------------------------------------------------
89+
PostgreSQL (IvorySQL 5.0) 18.0 on x86_64-linux, compiled by gcc-13.3.0, 64-bit
90+
(1 row)
91+
```
92+
93+
== 使用
94+
关于PGroonga的使用,请参阅 https://pgroonga.github.io/tutorial[PGroonga官方文档]
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
2+
:sectnums:
3+
:sectnumlevels: 5
4+
5+
= PgAudit
6+
7+
== 概述
8+
9+
PgAudit 是一个审计扩展,可以为 DDL、DML、DCL 等关键操作生成可追溯的日志记录。通过审计日志,数据库管理员能够满足合规要求、及时发现异常行为,并在出现问题时快速定位责任主体与影响范围。
10+
11+
== 功能特点
12+
13+
* *全面审计能力*:记录 `SELECT`、`INSERT`、`UPDATE`、`DELETE`、DDL 命令以及权限变更等操作,帮助构建完整的操作轨迹。
14+
* *灵活的审计维度*:支持全局审计、角色审计与对象审计,可按用户、角色、模式或具体操作类型进行精细化配置。
15+
* *平滑集成*:复用 PostgreSQL 标准日志子系统,可与 `syslog`、`logrotate` 等工具联动,兼容现有日志采集与分析方案。
16+
* *合规支撑*:提供结构化审计日志,便于生成符合金融、政企等行业规范的审计报告。
17+
* *安全增强*:通过记录和分析数据库活动,及时发现未授权访问、异常 DML 或潜在数据泄露风险。
18+
* *运维优化*:辅助回放操作行为、定位性能瓶颈,支撑 SQL 优化与问题排查。
19+
20+
== 安装部署
21+
22+
=== 环境准备
23+
24+
* 已安装的 IvorySQL 数据库。
25+
* 编译工具链:`gcc`、`make`、`tar` 等。
26+
* 数据库管理员权限,用于修改 `ivorysql.conf` 并重启数据库实例。
27+
28+
=== 编译安装 PgAudit
29+
30+
以 PgAudit 18.0 为例:
31+
32+
[source,shell]
33+
----
34+
wget https://github.com/pgaudit/pgaudit/archive/refs/tags/18.0.tar.gz
35+
tar -xf 18.0.tar.gz
36+
cd pgaudit-18.0
37+
make install USE_PGXS=1 PG_CONFIG=$PGHOME/bin/pg_config
38+
----
39+
40+
上述命令依赖环境变量 `PGHOME` 指向安装好的 IvorySQL 主目录。安装成功后,`pgaudit.so` 会被放置到 IvorySQL 的扩展目录中。
41+
42+
=== 注册扩展前的基础配置
43+
44+
修改 `ivorysql.conf`,启用插件并设置常用参数:
45+
----
46+
shared_preload_libraries = 'pgaudit' # 需实例重启生效
47+
pgaudit.log = 'read, write, ddl' # 审计范围示例,可按需调整
48+
----
49+
50+
重启数据库实例,使共享库配置生效。
51+
52+
=== 创建扩展并验证
53+
54+
[source,sql]
55+
----
56+
CREATE EXTENSION IF NOT EXISTS pgaudit;
57+
SELECT name,
58+
default_version,
59+
installed_version,
60+
comment
61+
FROM pg_available_extensions
62+
WHERE name = 'pgaudit';
63+
----
64+
65+
若返回的 `installed_version` 与期望版本一致,说明扩展安装成功。
66+
67+
== 使用
68+
69+
执行如下sql示例:
70+
71+
[source,sql]
72+
----
73+
CREATE TABLE audit_demo(id serial PRIMARY KEY, info text);
74+
INSERT INTO audit_demo(info) VALUES ('pgaudit test');
75+
SELECT * FROM audit_demo;
76+
UPDATE audit_demo SET info = 'pgaudit update' WHERE id = 1;
77+
DELETE FROM audit_demo WHERE id = 1;
78+
----
79+
80+
在数据库服务器上查看审计日志:
81+
82+
[source,shell]
83+
----
84+
tail -f $PGDATA/log/*.log | grep 'AUDIT:'
85+
----
86+
87+
[source,text]
88+
----
89+
2025-10-31 15:56:32.113 CST [11451] LOG: AUDIT: SESSION,1,1,DDL,CREATE SEQUENCE,SEQUENCE,public.audit_demo_id_seq,"CREATE TABLE audit_demo(id serial PRIMARY KEY, info text)",<not logged>
90+
2025-10-31 15:56:32.113 CST [11451] LOG: AUDIT: SESSION,1,1,DDL,CREATE TABLE,TABLE,public.audit_demo,"CREATE TABLE audit_demo(id serial PRIMARY KEY, info text)",<not logged>
91+
2025-10-31 15:56:32.113 CST [11451] LOG: AUDIT: SESSION,1,1,DDL,CREATE INDEX,INDEX,public.audit_demo_pkey,"CREATE TABLE audit_demo(id serial PRIMARY KEY, info text)",<not logged>
92+
2025-10-31 15:56:32.113 CST [11451] LOG: AUDIT: SESSION,1,1,DDL,ALTER SEQUENCE,SEQUENCE,public.audit_demo_id_seq,"CREATE TABLE audit_demo(id serial PRIMARY KEY, info text)",<not logged>
93+
2025-10-31 15:56:32.117 CST [11451] LOG: AUDIT: SESSION,2,1,WRITE,INSERT,,,INSERT INTO audit_demo(info) VALUES ('pgaudit test'),<not logged>
94+
2025-10-31 15:56:32.121 CST [11451] LOG: AUDIT: SESSION,3,1,READ,SELECT,,,SELECT * FROM audit_demo,<not logged>
95+
2025-10-31 15:56:32.122 CST [11451] LOG: AUDIT: SESSION,4,1,WRITE,UPDATE,,,UPDATE audit_demo SET info = 'pgaudit update' WHERE id = 1,<not logged>
96+
2025-10-31 15:56:32.127 CST [11451] LOG: AUDIT: SESSION,5,1,WRITE,DELETE,,,DELETE FROM audit_demo WHERE id = 1,<not logged>
97+
----
98+
99+
若想记录参数的值,打开`pgaudit.log_parameter = 'on'`,效果如下:
100+
[source,text]
101+
----
102+
ivorysql=# SHOW pgaudit.log_parameter;
103+
pgaudit.log_parameter
104+
-----------------------
105+
on
106+
(1 row)
107+
----

0 commit comments

Comments
 (0)