|
| 1 | +:sectnums: |
| 2 | +:sectnumlevels: 5 |
| 3 | + |
| 4 | += 生态组件适配贡献指南 |
| 5 | + |
| 6 | +== 概述 |
| 7 | + |
| 8 | +IvorySQL 作为一款基于 PostgreSQL 研发的 Oracle 兼容数据库,天然继承了 PostgreSQL 丰富的扩展生态。为了让更多的 PostgreSQL 生态组件能够在 IvorySQL 上稳定运行,IvorySQL 社区欢迎外部贡献者参与生态组件的适配工作。 |
| 9 | + |
| 10 | +本文档旨在为有意参与生态组件适配的贡献者提供完整的指引,涵盖从选题、环境准备、适配测试、文档编写到提交贡献的全流程。 |
| 11 | + |
| 12 | +== 适配范围 |
| 13 | + |
| 14 | +=== 适合的组件类型 |
| 15 | + |
| 16 | +以下类型的组件欢迎贡献者进行适配: |
| 17 | + |
| 18 | +* PostgreSQL 社区官方扩展(contrib 模块或知名第三方扩展) |
| 19 | +* 基于 PostgreSQL 扩展机制开发的工具类插件 |
| 20 | +* 与数据库运维、监控、性能分析相关的工具 |
| 21 | +* 数据迁移、同步、备份相关的工具 |
| 22 | +* 全文检索、向量检索、图数据库等增强型扩展 |
| 23 | +* 连接池、代理、中间件等周边生态工具 |
| 24 | + |
| 25 | +=== 不适合的组件 |
| 26 | + |
| 27 | +* 依赖特定操作系统或硬件架构且无法在主流平台运行的组件 |
| 28 | +* 与 IvorySQL Oracle 兼容模式存在根本性冲突且无法解决的组件 |
| 29 | +* 已停止维护或存在严重安全问题的组件 |
| 30 | +* 商业闭源且无法提供社区测试版本的组件 |
| 31 | + |
| 32 | +== 贡献流程 |
| 33 | + |
| 34 | +=== 第一步:选题与沟通 |
| 35 | + |
| 36 | +==== 查找已有适配 |
| 37 | + |
| 38 | +在开始适配工作之前,请先查阅 xref:master/ecosystem_components/ecosystem_overview.adoc[生态插件适配列表],确认目标组件是否已完成适配。 |
| 39 | + |
| 40 | +==== 提交 Issue |
| 41 | + |
| 42 | +如果您希望适配一个尚未收录的组件,请首先在 https://github.com/IvorySQL/ivorysql_docs[ivorysql_docs 仓库] 提交一个 Issue,说明以下内容: |
| 43 | + |
| 44 | +* 组件名称及项目地址 |
| 45 | +* 组件功能描述及适用场景 |
| 46 | +* 组件的开源协议 |
| 47 | +* 组件最近的维护状态(是否活跃维护) |
| 48 | +* 您计划适配的组件版本 |
| 49 | + |
| 50 | +维护者会评估该组件是否适合纳入 IvorySQL 生态,并在 Issue 中与您沟通确认。 |
| 51 | + |
| 52 | +[TIP] |
| 53 | +建议在 Issue 获得维护者确认后再开始适配工作,避免无效劳动。 |
| 54 | + |
| 55 | +==== 签署 CLA |
| 56 | + |
| 57 | +在提交文档贡献之前,请确保您已签署贡献者许可协议(CLA)。详情请参阅 xref:master/contribution/community_contribution_guide.adoc[社区贡献指南] 中的 CLA 签署说明。 |
| 58 | + |
| 59 | +=== 第二步:环境准备 |
| 60 | + |
| 61 | +==== IvorySQL 环境 |
| 62 | + |
| 63 | +请准备一套可用于测试的 IvorySQL 环境,建议满足以下要求: |
| 64 | + |
| 65 | +* IvorySQL 版本:5.0 及以上 |
| 66 | +* 操作系统:建议使用 Ubuntu 24.04 (x86_64) 或其他主流 Linux 发行版 |
| 67 | +* 安装路径:记录 IvorySQL 的安装路径,后续编译扩展时需要用到 `pg_config` 的路径 |
| 68 | + |
| 69 | +[TIP] |
| 70 | +可以通过 IvorySQL 官方提供的 Docker 镜像快速搭建测试环境,参考 xref:master/containerization/docker_podman_deployment.adoc[Docker & Podman 部署]。 |
| 71 | + |
| 72 | +==== 编译工具链 |
| 73 | + |
| 74 | +根据目标组件的编译方式,准备相应的工具链: |
| 75 | + |
| 76 | +* C/C++ 扩展:需要 gcc、make 等基础编译工具 |
| 77 | +* Rust 扩展:需要 cargo、rustc 等 Rust 工具链 |
| 78 | +* 其他语言扩展:需要对应语言的运行环境 |
| 79 | + |
| 80 | +=== 第三步:适配测试 |
| 81 | + |
| 82 | +==== 源码编译 |
| 83 | + |
| 84 | +从组件的官方仓库获取源码,按照以下步骤进行编译: |
| 85 | + |
| 86 | +. 设置 `PG_CONFIG` 环境变量指向 IvorySQL 的 `pg_config` |
| 87 | ++ |
| 88 | +[literal] |
| 89 | +---- |
| 90 | +export PG_CONFIG=/usr/local/ivorysql/ivorysql-5/bin/pg_config |
| 91 | +---- |
| 92 | + |
| 93 | +. 按照组件官方文档进行编译安装 |
| 94 | ++ |
| 95 | +[literal] |
| 96 | +---- |
| 97 | +# 以某扩展为例 |
| 98 | +git clone <组件源码仓库地址> |
| 99 | +cd <组件目录> |
| 100 | +make |
| 101 | +sudo make install |
| 102 | +---- |
| 103 | + |
| 104 | +==== 功能验证 |
| 105 | + |
| 106 | +编译安装成功后,需要进行以下验证: |
| 107 | + |
| 108 | +. *扩展创建验证*:在 IvorySQL 中执行 `CREATE EXTENSION` 创建扩展,确认扩展可以正常加载 |
| 109 | ++ |
| 110 | +[literal] |
| 111 | +---- |
| 112 | +ivorysql=# CREATE EXTENSION <扩展名>; |
| 113 | +CREATE EXTENSION |
| 114 | +---- |
| 115 | + |
| 116 | +. *版本确认*:确认安装的扩展版本与预期一致 |
| 117 | ++ |
| 118 | +[literal] |
| 119 | +---- |
| 120 | +ivorysql=# SELECT * FROM pg_available_extensions WHERE name = '<扩展名>'; |
| 121 | +---- |
| 122 | + |
| 123 | +. *功能测试*:根据组件文档提供的功能用例,逐一验证核心功能是否正常工作 |
| 124 | +. *边界测试*:测试一些边界条件和异常场景,确认扩展的健壮性 |
| 125 | + |
| 126 | +==== Oracle 兼容性测试 |
| 127 | + |
| 128 | +如果目标组件需要在 IvorySQL 的 Oracle 兼容模式下使用,还需要进行额外的兼容性测试: |
| 129 | + |
| 130 | +. 使用 1521 端口(Oracle 兼容模式默认端口)连接数据库 |
| 131 | ++ |
| 132 | +[literal] |
| 133 | +---- |
| 134 | +psql -p 1521 |
| 135 | +---- |
| 136 | + |
| 137 | +. 测试组件在 Oracle 兼容模式下的数据类型兼容性 |
| 138 | +. 测试组件功能是否支持 Oracle 风格的匿名块、存储过程、函数等 |
| 139 | +. 记录所有兼容性问题及解决方案 |
| 140 | + |
| 141 | +[NOTE] |
| 142 | +并非所有组件都支持 Oracle 兼容模式。如果组件依赖 PostgreSQL 特有的内部机制(如使用 `pg_query` 模块进行语句解析),可能无法在 Oracle 兼容模式下运行,需要在文档中明确说明。 |
| 143 | + |
| 144 | +=== 第四步:文档编写 |
| 145 | + |
| 146 | +==== 文档结构 |
| 147 | + |
| 148 | +每篇生态组件适配文档应包含以下章节(可根据组件特点适当调整): |
| 149 | + |
| 150 | +[cols="1,3"] |
| 151 | +|=== |
| 152 | +|章节 |说明 |
| 153 | + |
| 154 | +|概述 |
| 155 | +|介绍组件的功能、适用场景,以及与 IvorySQL 的关系 |
| 156 | + |
| 157 | +|原理介绍 |
| 158 | +|(可选)介绍组件的核心工作原理,帮助读者理解组件的运作机制 |
| 159 | + |
| 160 | +|安装 |
| 161 | +|详细的安装步骤,包括依赖安装、源码获取、编译安装、扩展创建等 |
| 162 | + |
| 163 | +|配置 |
| 164 | +|(可选)如果组件需要额外的配置步骤(如修改 `ivorysql.conf`、重启服务等),在此说明 |
| 165 | + |
| 166 | +|使用 |
| 167 | +|核心功能的使用示例,包括创建对象、执行操作、查询结果等 |
| 168 | + |
| 169 | +|Oracle 兼容性 |
| 170 | +|(可选)组件在 Oracle 兼容模式下的表现,包括支持的功能和已知限制 |
| 171 | +|=== |
| 172 | + |
| 173 | +==== 文档模板 |
| 174 | + |
| 175 | +以下是一个生态组件适配文档的基础模板,贡献者可以在此基础上填充内容: |
| 176 | + |
| 177 | +[source,asciidoc] |
| 178 | +------ |
| 179 | +:sectnums: |
| 180 | +:sectnumlevels: 5 |
| 181 | +
|
| 182 | += <组件名称> |
| 183 | +
|
| 184 | +== 概述 |
| 185 | +<组件功能介绍、适用场景、与 IvorySQL 的关系> |
| 186 | +
|
| 187 | +项目地址:<https://github.com/xxx/xxx> |
| 188 | +
|
| 189 | +版本:<适配的组件版本号> |
| 190 | +
|
| 191 | +开源协议:<组件的开源协议> |
| 192 | +
|
| 193 | +== 安装 |
| 194 | +
|
| 195 | +[TIP] |
| 196 | +源码测试安装环境为 <操作系统版本>,环境中已安装 IvorySQL 5 及以上版本,安装路径为 /usr/local/ivorysql/ivorysql-5 |
| 197 | +
|
| 198 | +=== 依赖 |
| 199 | +<列出并说明安装所需的依赖> |
| 200 | +
|
| 201 | +=== 源码安装 |
| 202 | +[literal] |
| 203 | +---- |
| 204 | +# 获取源码 |
| 205 | +git clone <仓库地址> |
| 206 | +cd <目录> |
| 207 | + |
| 208 | +# 设置 pg_config 路径 |
| 209 | +export PG_CONFIG=/usr/local/ivorysql/ivorysql-5/bin/pg_config |
| 210 | + |
| 211 | +# 编译安装 |
| 212 | +make |
| 213 | +sudo make install |
| 214 | +---- |
| 215 | +
|
| 216 | +=== 创建扩展 |
| 217 | +[literal] |
| 218 | +---- |
| 219 | +ivorysql=# CREATE EXTENSION <扩展名>; |
| 220 | +CREATE EXTENSION |
| 221 | + |
| 222 | +ivorysql=# SELECT * FROM pg_available_extensions WHERE name = '<扩展名>'; |
| 223 | +---- |
| 224 | +
|
| 225 | +== 使用 |
| 226 | +
|
| 227 | +=== <功能点一> |
| 228 | +<使用示例及输出> |
| 229 | +
|
| 230 | +=== <功能点二> |
| 231 | +<使用示例及输出> |
| 232 | +
|
| 233 | +== Oracle 兼容性 |
| 234 | +<可选:在 Oracle 兼容模式下的测试结果> |
| 235 | +------ |
| 236 | + |
| 237 | +==== 同步更新概述页 |
| 238 | + |
| 239 | +完成组件文档编写后,请务必同步更新 xref:master/ecosystem_components/ecosystem_overview.adoc[ecosystem_overview.adoc] 中的插件列表表格,在表格末尾追加一行新记录,包含以下信息: |
| 240 | + |
| 241 | +* 序号:当前最大序号加 1 |
| 242 | +* 插件名称:带 xref 链接的插件名称 |
| 243 | +* 版本:您适配的组件版本 |
| 244 | +* 功能描述:一句话概括组件功能 |
| 245 | +* 适用场景:列举主要适用场景 |
| 246 | + |
| 247 | +[NOTE] |
| 248 | +中英文版本的概述页都需要同步更新。 |
| 249 | + |
| 250 | +=== 第五步:提交 PR |
| 251 | + |
| 252 | +==== 创建分支 |
| 253 | + |
| 254 | +在您的 fork 仓库中创建特性分支: |
| 255 | + |
| 256 | +[literal] |
| 257 | +---- |
| 258 | +git checkout -b feature/adapt-<组件名称> |
| 259 | +---- |
| 260 | + |
| 261 | +==== 添加文件 |
| 262 | + |
| 263 | +. 将文档文件放入 `CN/modules/ROOT/pages/master/ecosystem_components/` 目录 |
| 264 | +. 如有图片资源,放入 `CN/modules/ROOT/images/` 目录 |
| 265 | +. 同步准备英文版本,放入对应的 EN 目录 |
| 266 | +. 更新 CN 和 EN 的 `nav.adoc` 和 `ecosystem_overview.adoc` |
| 267 | + |
| 268 | +==== 提交 PR |
| 269 | + |
| 270 | +. 在 PR 标题或描述中关联对应的 Issue 编号(如 `Fixes #123`) |
| 271 | +. 在 PR 描述中说明: |
| 272 | +* 适配的组件名称和版本 |
| 273 | +* 测试环境信息 |
| 274 | +* 已完成的测试项目 |
| 275 | +* 已知的限制或问题 |
| 276 | + |
| 277 | +==== 等待评审 |
| 278 | + |
| 279 | +维护者会对 PR 进行评审,可能会提出以下修改建议: |
| 280 | + |
| 281 | +* 补充缺失的测试用例 |
| 282 | +* 修正文档格式问题 |
| 283 | +* 完善 Oracle 兼容性测试 |
| 284 | +* 补充英文版翻译 |
| 285 | + |
| 286 | +请根据评审意见及时修改并更新 PR。 |
| 287 | + |
| 288 | +== 常见问题 |
| 289 | + |
| 290 | +=== 编译报错找不到 pg_config |
| 291 | + |
| 292 | +请确认 `PG_CONFIG` 环境变量设置正确,指向 IvorySQL 安装目录下的 `bin/pg_config`。可以通过以下命令确认: |
| 293 | + |
| 294 | +[literal] |
| 295 | +---- |
| 296 | +$PG_CONFIG --version |
| 297 | +---- |
| 298 | + |
| 299 | +=== 扩展创建失败 |
| 300 | + |
| 301 | +请检查: |
| 302 | + |
| 303 | +. 扩展的 `.so` 文件是否正确安装到 IvorySQL 的 `lib` 目录 |
| 304 | +. 扩展的 `.sql` 和 `.control` 文件是否正确安装到 `share/extension` 目录 |
| 305 | +. IvorySQL 版本是否与组件要求的 PostgreSQL 版本兼容 |
| 306 | + |
| 307 | +=== Oracle 兼容模式下功能异常 |
| 308 | + |
| 309 | +部分 PostgreSQL 扩展依赖 PG 原生解析器,在 Oracle 兼容模式下可能无法正常工作。遇到此类问题时,请在文档的 "Oracle 兼容性" 章节中明确说明限制,并提供替代方案(如有)。 |
| 310 | + |
| 311 | +=== 不确定组件是否适合适配 |
| 312 | + |
| 313 | +请先在 https://github.com/IvorySQL/ivorysql_docs[Issues] 中发起讨论,描述组件的功能和您的适配计划,维护者会给出评估意见。 |
0 commit comments