From 2d9b1d9b664b812a19d73f8ab8982c25ca96416f Mon Sep 17 00:00:00 2001 From: JiaoShuntian Date: Tue, 9 Sep 2025 18:06:13 +0800 Subject: [PATCH 1/2] v4.6 release update --- CN/antora.yml | 4 +- CN/modules/ROOT/pages/v4.6/1.adoc | 85 +++++++++++++++---------- CN/modules/ROOT/pages/v4.6/10.adoc | 4 +- CN/modules/ROOT/pages/v4.6/12.adoc | 4 +- CN/modules/ROOT/pages/v4.6/2.adoc | 26 ++++---- CN/modules/ROOT/pages/v4.6/23.adoc | 2 +- CN/modules/ROOT/pages/v4.6/3.adoc | 12 ++-- CN/modules/ROOT/pages/v4.6/6.adoc | 22 +++---- CN/modules/ROOT/pages/v4.6/7.adoc | 14 ++-- CN/modules/ROOT/pages/v4.6/8.adoc | 2 +- CN/modules/ROOT/pages/v4.6/9.adoc | 6 +- CN/modules/ROOT/pages/v4.6/welcome.adoc | 2 +- EN/antora.yml | 4 +- EN/modules/ROOT/pages/v4.6/1.adoc | 76 ++++++++++++++-------- EN/modules/ROOT/pages/v4.6/10.adoc | 4 +- EN/modules/ROOT/pages/v4.6/12.adoc | 4 +- EN/modules/ROOT/pages/v4.6/2.adoc | 26 ++++---- EN/modules/ROOT/pages/v4.6/23.adoc | 2 +- EN/modules/ROOT/pages/v4.6/3.adoc | 12 ++-- EN/modules/ROOT/pages/v4.6/6.adoc | 28 ++++---- EN/modules/ROOT/pages/v4.6/7.adoc | 14 ++-- EN/modules/ROOT/pages/v4.6/8.adoc | 2 +- EN/modules/ROOT/pages/v4.6/9.adoc | 6 +- EN/modules/ROOT/pages/v4.6/welcome.adoc | 2 +- README_zh.md | 2 +- 25 files changed, 204 insertions(+), 161 deletions(-) diff --git a/CN/antora.yml b/CN/antora.yml index fb9f27c3..2d796d70 100644 --- a/CN/antora.yml +++ b/CN/antora.yml @@ -1,7 +1,7 @@ name: ivorysql-doc title: IvorySQL -version: v4.5 -start_page: v4.5/welcome.adoc +version: v4.6 +start_page: v4.6/welcome.adoc asciidoc: attributes: source-language: asciidoc@ diff --git a/CN/modules/ROOT/pages/v4.6/1.adoc b/CN/modules/ROOT/pages/v4.6/1.adoc index e3bc9953..0f8002ea 100644 --- a/CN/modules/ROOT/pages/v4.6/1.adoc +++ b/CN/modules/ROOT/pages/v4.6/1.adoc @@ -4,50 +4,65 @@ == 版本概览 -[**发行日期:2025年06月04日**] +[**发行日期:2025年09月10日**] -IvorySQL 4.5,基于PostgreSQL 17.5,并修复了多个问题。有关更新的完整列表,请访问我们的 https://docs.ivorysql.org/[文档网站] 。 +IvorySQL 4.6,基于PostgreSQL 17.6,并修复了多个问题。有关更新的完整列表,请访问我们的 https://docs.ivorysql.org/[文档网站] 。 == 增强功能及问题修复 -- PostgreSQL 17.5 +- PostgreSQL 17.6 -1. 修复了在检查声明为 GB18030 编码的无效字符串时,可能发生的一字节缓冲区超读(one-byte buffer overread)问题,增强了系统处理无效编码数据的稳健性。 -2. 确保对分区表上存在的自引用外键(self-referential foreign keys)进行正确处理,提升了复杂数据结构下分区表的可靠性。 -3. 避免了在 brin_bloom_union() 函数中合并已压缩的 BRIN 摘要(summaries)时,可能发生的数据丢失风险,保障了索引数据的准确性。 -4. 修正了在嵌套 WITH 子句中的 INSERT/UPDATE/DELETE/MERGE 命令所附带的 WITH 子句内,对外部公共表表达式(CTE)名称引用时的处理逻辑,确保了复杂查询的正确执行。 -5. 修复了 ALTER TABLE ADD COLUMN 命令,以确保在添加列时,能够正确处理包含默认值的域(domain)类型,提高了表结构变更操作的准确性 +1. 加强规划器估算函数中的安全检查。 + +2. 防止利用 pg_dump 脚本攻击执行恢复操作的用户。 + +3. 在 pg_dump 输出结果的注释信息中,将名称内的换行符转换为空格。 + +4. 修复 BRIN numeric_minmax_multi_ops 支持函数中距离计算错误的问题。 + +5. 避免可接受的 XML 输入大小出现性能回退。 + + +更多细节, 请参阅 https://www.postgresql.org/docs/release/17.6/[PostgreSQL发布说明]. -+ -更多细节, 请参阅 https://www.postgresql.org/docs/release/17.5/[PostgreSQL发布说明]. +- IvorySQL 4.6 新特性 -- IvorySQL 4.5 +1. 内核升级至 PG 17.6 -1. MIPS 全平台打包支持:特性 https://github.com/IvorySQL/IvorySQL/issues/736[#736] +2. 兼容MongoDB + -为 MIPS 架构提供多平台介质包,支持国内外主流操作系统,包括 Red Hat、Debian、麒麟、UOS、凝思等。 +提供基于 FerretDB 与 DocumentDB 支持兼容 MongoDB 的解决方案。 -2. 新增IvorySQL 在线体验平台:特性 https://github.com/IvorySQL/ivorysql-wasm/issues/1[#1] +3. loongarch 架构全平台打包支持 ++ +提供面向 loongarch 架构的多平台软件包,支持国内外主流操作系统,包括Red Hat、Debian、麒麟(Kylin)、统信(UOS)以及 NSAR OS 等。 +提供面向龙芯架构(LoongArch)的多平台介质包,兼容国内外主流操作系统,包括红帽(Red Hat)、Debian、麒麟(Kylin)、统信UOS、凝思NSAR OS等,同时支持x86、ARM及MIPS架构。 + +4. 新增IvorySQL 在线体验平台 + 提供一个基于 Web 的平台,用户可直接通过浏览器界面在线体验 IvorySQL V4.5 并进行数据库交互。 -3. 新增社区行为准则:特性 https://github.com/IvorySQL/IvorySQL/issues/808[#808] +5. 容器化部署支持 (Docker Swarm) + -为社区参与者明确了行为规范和期望,旨在营造一个友好且互相尊重的社区环境。 +支持在 Docker、Swarm 环境中部署 IvorySQL 单机数据库与高可用集群。 -4. 更新社区贡献指南:特性 https://github.com/IvorySQL/ivorysql_docs/pull/121[#121] +6. 容器化部署支持 (Kubernetes) + -对社区贡献流程、规范和最佳实践进行了修订与完善,方便贡献者参与。 +支持使用 Helm 在 Kubernetes 上部署 IvorySQL 单机数据库与高可用集群。 -5. 实现文档构建与网站更新自动化:特性 https://github.com/IvorySQL/ivorysql_docs/issues/115[#115] +7. https://github.com/IvorySQL/ivory-cloud/releases/tag/ivyc_4.0[IvorySQL Cloud v4.0] 发布 + -通过 Pull Request (PR) 自动触发文档构建及官方网站内容更新流程。 +IvorySQL云平台当前支持IvorySQL v4数据库的订阅管理,以及其周边生态的全面管理。 -6. 改进贡献者工作流程,通过 /assign 命令自我分配任务:特性 https://github.com/IvorySQL/ivorysql_docs/issues/109[#109] +- IvorySQL 4.6 问题修复 -7. IvorySQL Operator V4 适配 IvorySQL 4.5:特性 https://github.com/IvorySQL/ivory-operator/pull/79[#79] +1. 在aarch64平台上缺少依赖库libcrypt。 +2. p执行make和make install时,前缀test_开头的测试项被错误地编译和安装到extension目录。 +3. 文档:修复一些错别字。 +4. 文档:修复安装部分的文档错误。 +5. 文档:更新社区贡献流程。 == 源代码 @@ -59,23 +74,29 @@ IvorySQL主要包含2个代码仓库: == 贡献人员 以下个人(按姓氏排序)作为补丁作者、提交者、审查者、测试者或问题报告者为此版本做出了贡献。 -- Cary Huang -- Denis Lussier -- Flyingbeecd +- caffiendo +- Cédric Villemain +- flyingbeecd - Grant Zhou +- huchangqiqi +- Pedro Lopez +- RRRRhl +- shangwei007 +- tiankongbuqi +- Yasir Hussain Shah +- 初少林 +- 冯若航 - 高雪玉 +- 李苑 +- 牛世继 - 矫顺田 -- 纪虎林 +- 类延良 - 梁翔宇 - 吕新杰 -- 牛世继 - 潘振浩 - 石卓妍 - 隋戈 - 陶郑 -- 王康 -- 王守波 -- 杨世华 - 严少安 -- 赵法威 -- 邹仁利 \ No newline at end of file +- 杨世华 +- 赵法威 \ No newline at end of file diff --git a/CN/modules/ROOT/pages/v4.6/10.adoc b/CN/modules/ROOT/pages/v4.6/10.adoc index 49b6cb66..daf9c22d 100644 --- a/CN/modules/ROOT/pages/v4.6/10.adoc +++ b/CN/modules/ROOT/pages/v4.6/10.adoc @@ -448,7 +448,7 @@ $ createdb orcl $ psql -psql (17.5) +psql (17.6) Type "help" for help. @@ -477,7 +477,7 @@ ivorysql=# ``` $ psql orcl -psql (17.5) +psql (17.6) Type "help" for help. diff --git a/CN/modules/ROOT/pages/v4.6/12.adoc b/CN/modules/ROOT/pages/v4.6/12.adoc index 863cfafc..6597e1c1 100644 --- a/CN/modules/ROOT/pages/v4.6/12.adoc +++ b/CN/modules/ROOT/pages/v4.6/12.adoc @@ -23,7 +23,7 @@ HNSW (Hierarchical Navigating Small World) 是一种基于图的索引算法, == 安装 [TIP] ==== -环境中已经安装了IvorySQL4.5及以上版本,安装路径为/usr/local/ivorysql/ivorysql-4 +环境中已经安装了IvorySQL4.6及以上版本,安装路径为/usr/local/ivorysql/ivorysql-4 ==== === 源码安装 @@ -49,7 +49,7 @@ sudo --preserve-env=PG_CONFIG make install ** 创建pgvector扩展 ``` [ivorysql@localhost ivorysql-4]$ psql -psql (17.5) +psql (17.6) Type "help" for help. ivorysql=# create extension vector; diff --git a/CN/modules/ROOT/pages/v4.6/2.adoc b/CN/modules/ROOT/pages/v4.6/2.adoc index aa12fc04..004eee61 100644 --- a/CN/modules/ROOT/pages/v4.6/2.adoc +++ b/CN/modules/ROOT/pages/v4.6/2.adoc @@ -69,16 +69,16 @@ IvorySQL是一个功能强大的开源对象关系数据库管理系统(ORDBMS) == 与Oracle的兼容性 -* https://docs.ivorysql.org/cn/ivorysql-doc/v4.5/v4.5/14[ivorysql框架设计] -* https://docs.ivorysql.org/cn/ivorysql-doc/v4.5/v4.5/15[GUC框架] -* https://docs.ivorysql.org/cn/ivorysql-doc/v4.5/v4.5/16[大小写转换] -* https://docs.ivorysql.org/cn/ivorysql-doc/v4.5/v4.5/17[双模式设计] -* https://docs.ivorysql.org/cn/ivorysql-doc/v4.5/v4.5/18[兼容Oracle like] -* https://docs.ivorysql.org/cn/ivorysql-doc/v4.5/v4.5/19[兼容Oracle匿名块] -* https://docs.ivorysql.org/cn/ivorysql-doc/v4.5/v4.5/20[兼容Oracle函数与存储过程] -* https://docs.ivorysql.org/cn/ivorysql-doc/v4.5/v4.5/21[内置数据类型与内置函数] -* https://docs.ivorysql.org/cn/ivorysql-doc/v4.5/v4.5/22[新增Oracle兼容模式的端口与IP] -* https://docs.ivorysql.org/cn/ivorysql-doc/v4.5/v4.5/26[XML函数] -* https://docs.ivorysql.org/cn/ivorysql-doc/v4.5/v4.5/27[兼容Oracle sequence] -* https://docs.ivorysql.org/cn/ivorysql-doc/v4.5/v4.5/28[包] -* https://docs.ivorysql.org/cn/ivorysql-doc/v4.5/v4.5/29[不可见列] \ No newline at end of file +* https://docs.ivorysql.org/cn/ivorysql-doc/v4.6/v4.6/14[ivorysql框架设计] +* https://docs.ivorysql.org/cn/ivorysql-doc/v4.6/v4.6/15[GUC框架] +* https://docs.ivorysql.org/cn/ivorysql-doc/v4.6/v4.6/16[大小写转换] +* https://docs.ivorysql.org/cn/ivorysql-doc/v4.6/v4.6/17[双模式设计] +* https://docs.ivorysql.org/cn/ivorysql-doc/v4.6/v4.6/18[兼容Oracle like] +* https://docs.ivorysql.org/cn/ivorysql-doc/v4.6/v4.6/19[兼容Oracle匿名块] +* https://docs.ivorysql.org/cn/ivorysql-doc/v4.6/v4.6/20[兼容Oracle函数与存储过程] +* https://docs.ivorysql.org/cn/ivorysql-doc/v4.6/v4.6/21[内置数据类型与内置函数] +* https://docs.ivorysql.org/cn/ivorysql-doc/v4.6/v4.6/22[新增Oracle兼容模式的端口与IP] +* https://docs.ivorysql.org/cn/ivorysql-doc/v4.6/v4.6/26[XML函数] +* https://docs.ivorysql.org/cn/ivorysql-doc/v4.6/v4.6/27[兼容Oracle sequence] +* https://docs.ivorysql.org/cn/ivorysql-doc/v4.6/v4.6/28[包] +* https://docs.ivorysql.org/cn/ivorysql-doc/v4.6/v4.6/29[不可见列] \ No newline at end of file diff --git a/CN/modules/ROOT/pages/v4.6/23.adoc b/CN/modules/ROOT/pages/v4.6/23.adoc index ec3f938a..0d3310e8 100644 --- a/CN/modules/ROOT/pages/v4.6/23.adoc +++ b/CN/modules/ROOT/pages/v4.6/23.adoc @@ -29,7 +29,7 @@ IvorySQL由一个核心开发团队维护,该团队拥有对GitHub上的IvoryS == **贡献者指南** -在贡献之前,我们需要了解下IvorySQL目前的版本以及文档的版本。目前,我们维护着4.5等版本,我们的版本紧跟PG的更新步伐,贡献之前请更新至最新版本。之后我们需要细心浏览一下贡献的样式风格,熟悉代码贡献风格、提Issue样式、拉取PR标题样式、代码注释样式、文档贡献样式、文章贡献样式,这可以帮助您尽快成为IvorySQL的贡献者奥~。 +在贡献之前,我们需要了解下IvorySQL目前的版本以及文档的版本。目前,我们维护着4.6等版本,我们的版本紧跟PG的更新步伐,贡献之前请更新至最新版本。之后我们需要细心浏览一下贡献的样式风格,熟悉代码贡献风格、提Issue样式、拉取PR标题样式、代码注释样式、文档贡献样式、文章贡献样式,这可以帮助您尽快成为IvorySQL的贡献者奥~。 === 贡献前的准备 diff --git a/CN/modules/ROOT/pages/v4.6/3.adoc b/CN/modules/ROOT/pages/v4.6/3.adoc index bef42daa..4f67d6ac 100644 --- a/CN/modules/ROOT/pages/v4.6/3.adoc +++ b/CN/modules/ROOT/pages/v4.6/3.adoc @@ -51,7 +51,7 @@ gpgcheck=0 ``` 保存退出后,安装IvorySQL4 ``` -$ sudo dnf install -y ivorysql4-4.5 +$ sudo dnf install -y ivorysql4-4.6 ``` 正确安装后,数据库将被安装在/usr/ivory-4/文件夹内 @@ -108,19 +108,19 @@ ivorysql 3238 1551 0 20:35 pts/0 00:00:00 grep --color=auto postgres ** 从Docker Hub上获取IvorySQL镜像 ``` -$ docker pull ivorysql/ivorysql:4.5-ubi8 +$ docker pull ivorysql/ivorysql:4.6-ubi8 ``` ** 运行IvorySQL ``` -$ docker run --name ivorysql -p 5434:5432 -e IVORYSQL_PASSWORD=your_password -d ivorysql/ivorysql:4.5-ubi8 +$ docker run --name ivorysql -p 5434:5432 -e IVORYSQL_PASSWORD=your_password -d ivorysql/ivorysql:4.6-ubi8 ``` ** 查看IvorySQL容器运行是否成功 ``` $ docker ps | grep ivorysql CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -6faa2d0ed705 ivorysql:4.5-ubi8 "docker-entrypoint.s…" 50 seconds ago Up 49 seconds 5866/tcp, 0.0.0.0:5434->5432/tcp ivorysql +6faa2d0ed705 ivorysql:4.6-ubi8 "docker-entrypoint.s…" 50 seconds ago Up 49 seconds 5866/tcp, 0.0.0.0:5434->5432/tcp ivorysql ``` == 数据库连接 @@ -128,7 +128,7 @@ CONTAINER ID IMAGE COMMAND CREATED ST psql连接数据库: ``` $ psql -d -psql (17.5) +psql (17.6) Type "help" for help. ivorysql=# @@ -141,4 +141,4 @@ TIP: Docker运行IvorySQL时,需要添加额外参数,如 psql -d ivorysql - 现在可以开始使用IvorySQL啦!就是这么简单! -想要获得更多安装方式,请参考xref:v4.5/6.adoc[安装指南] +想要获得更多安装方式,请参考xref:v4.6/6.adoc[安装指南] diff --git a/CN/modules/ROOT/pages/v4.6/6.adoc b/CN/modules/ROOT/pages/v4.6/6.adoc index a1faf1f3..f75461de 100644 --- a/CN/modules/ROOT/pages/v4.6/6.adoc +++ b/CN/modules/ROOT/pages/v4.6/6.adoc @@ -14,7 +14,7 @@ IvorySQL安装方式包括以下5种: - <<源码安装>> - <> -本章将详细介绍每种方式的安装、运行及卸载过程。想要更快获得IvorySQL,请参阅xref:v4.5/3.adoc#快速开始[快速开始]。 +本章将详细介绍每种方式的安装、运行及卸载过程。想要更快获得IvorySQL,请参阅xref:v4.6/3.adoc#快速开始[快速开始]。 同样,安装前请先创建一个用户,并赋予其root权限,安装、使用和卸载均以该用户执行。这里以ivorysql用户为例。 @@ -32,7 +32,7 @@ gpgcheck=0 ``` 保存退出后,安装IvorySQL4 ``` -$ sudo dnf install -y ivorysql4-4.5 +$ sudo dnf install -y ivorysql4-4.6 ``` [[docker安装]] @@ -40,12 +40,12 @@ $ sudo dnf install -y ivorysql4-4.5 ** 从Docker Hub上获取IvorySQL镜像 ``` -$ docker pull ivorysql/ivorysql:4.5-ubi8 +$ docker pull ivorysql/ivorysql:4.6-ubi8 ``` ** 运行IvorySQL ``` -$ docker run --name ivorysql -p 5434:5432 -e IVORYSQL_PASSWORD=your_password -d ivorysql/ivorysql:4.5-ubi8 +$ docker run --name ivorysql -p 5434:5432 -e IVORYSQL_PASSWORD=your_password -d ivorysql/ivorysql:4.6-ubi8 ``` -e参数说明 |==== @@ -73,7 +73,7 @@ $ sudo dnf install -y lz4 libicu libxslt python3 ``` ** 获取rpm包 ``` -$ sudo wget https://github.com/IvorySQL/IvorySQL/releases/download/IvorySQL_4.5/IvorySQL-4.5-a50789d-20250304.x86_64.rpm +$ sudo wget https://github.com/IvorySQL/IvorySQL/releases/download/IvorySQL_4.6/IvorySQL-4.6-a50789d-20250304.x86_64.rpm ``` ** 安装rpm包 @@ -138,12 +138,12 @@ $ sudo apt -y install pkg-config libreadline-dev libicu-dev libldap2-dev uuid-de ** 获取deb包 ``` -$ sudo wget https://github.com/IvorySQL/IvorySQL/releases/download/IvorySQL_4.5/IvorySQL-4.5-a50789d-20250304.amd64.deb +$ sudo wget https://github.com/IvorySQL/IvorySQL/releases/download/IvorySQL_4.6/IvorySQL-4.6-a50789d-20250304.amd64.deb ``` ** 安装deb包 ``` -$ sudo dpkg -i IvorySQL-4.5-a50789d-20250304.amd64.deb +$ sudo dpkg -i IvorySQL-4.6-a50789d-20250304.amd64.deb ``` 数据库将被安装在/usr/ivory-4/路径下。 @@ -207,7 +207,7 @@ ivorysql 130445 130274 0 02:45 pts/1 00:00:00 grep --color=auto postgres psql连接数据库: ``` $ psql -d -psql (17.5) +psql (17.6) Type "help" for help. ivorysql=# @@ -231,7 +231,7 @@ TIP: Docker运行IvorySQL时,需要添加额外参数,参考:psql -d ivory 执行以下命令依次卸载: ``` -$ sudo dnf remove -y ivorysql4-4.5 +$ sudo dnf remove -y ivorysql4-4.6 ``` === docker安装的卸载 @@ -240,7 +240,7 @@ $ sudo dnf remove -y ivorysql4-4.5 ``` $ docker stop ivorysql $ docker rm ivorysql -$ docker rmi ivorysql/ivorysql:4.5-ubi8 +$ docker rmi ivorysql/ivorysql:4.6-ubi8 ``` === rpm安装的卸载 @@ -264,6 +264,6 @@ $ sudo rm -rf /usr/ivory-4/ 执行以下命令卸载数据库并清理文件夹: ``` -$ sudo dpkg -P IvorySQL-4.5 +$ sudo dpkg -P IvorySQL-4.6 $ sudo rm -rf /usr/ivory-4/ ``` diff --git a/CN/modules/ROOT/pages/v4.6/7.adoc b/CN/modules/ROOT/pages/v4.6/7.adoc index 359291e7..e3e4fc90 100644 --- a/CN/modules/ROOT/pages/v4.6/7.adoc +++ b/CN/modules/ROOT/pages/v4.6/7.adoc @@ -8,9 +8,9 @@ == 主节点 === 安装并启动数据库 -yum源快速安装数据库,请参考xref:v4.5/3.adoc[快速安装]。 +yum源快速安装数据库,请参考xref:v4.6/3.adoc[快速安装]。 -想要获取更多安装方式,请参考xref:v4.5/6.adoc#安装指南[安装指南]。 +想要获取更多安装方式,请参考xref:v4.6/6.adoc#安装指南[安装指南]。 [NOTE] 主节点数据库需要安装并**启动** @@ -56,9 +56,9 @@ $ pg_ctl restart == 备节点 === 安装数据库 -Yum源快速安装数据库,请参考xref:v4.5/3.adoc#快速安装[快速安装]。 +Yum源快速安装数据库,请参考xref:v4.6/3.adoc#快速安装[快速安装]。 -想要获取更多安装方式,请参考xref:v4.5/6.adoc#安装指南[安装指南]。 +想要获取更多安装方式,请参考xref:v4.6/6.adoc#安装指南[安装指南]。 [NOTE] 备节点数据库只需要安装,**不需要启动** @@ -118,7 +118,7 @@ ivorysql 6567 6139 0 21:54 ? 00:00:00 postgres: walreceiver streaming 在主节点上psql连接数据库,并查看集群状态: ``` $ psql -d ivorysql -psql (17.5) +psql (17.6) Type "help" for help. ivorysql=# select * from pg_stat_replication; @@ -139,7 +139,7 @@ xmin | state | sent_lsn | write_lsn | flush_lsn | replay_lsn | write_lag | 例如,在主节点创建一个新的数据库test,并在主节点进行查询: ``` $ psql -d ivorysql -psql (17.5) +psql (17.6) Type "help" for help. ivorysql=# create database test; @@ -159,7 +159,7 @@ ivorysql=# \l 在备节点查询: ``` $ psql -d ivorysql -psql (17.5) +psql (17.6) Type "help" for help. ivorysql=# \l diff --git a/CN/modules/ROOT/pages/v4.6/8.adoc b/CN/modules/ROOT/pages/v4.6/8.adoc index e1a1723b..b476e835 100644 --- a/CN/modules/ROOT/pages/v4.6/8.adoc +++ b/CN/modules/ROOT/pages/v4.6/8.adoc @@ -1973,7 +1973,7 @@ SELECT concat_lower_or_upper('Hello', 'World', uppercase => true); **详见:** -- [GUC变量](https://docs.ivorysql.org/cn/ivorysql-doc/v4.5/v4.5/15) +- [GUC变量](https://docs.ivorysql.org/cn/ivorysql-doc/v4.6/v4.6/15) === 更改表 diff --git a/CN/modules/ROOT/pages/v4.6/9.adoc b/CN/modules/ROOT/pages/v4.6/9.adoc index 6171dfb8..592641f3 100644 --- a/CN/modules/ROOT/pages/v4.6/9.adoc +++ b/CN/modules/ROOT/pages/v4.6/9.adoc @@ -99,7 +99,7 @@ pg_upgrade 工具可以支持IvorySQL跨版本的就地升级。 升级可以在 == 管理IvorySQL版本 -IvorySQL基于PostgreSQL开发,版本更新频率与PostgreSQL版本更新频率保持一致,每年更新一个大版本,每季度更新一个小版本。IvorySQL目前发布的版本有1.0到4.5,分别基于PostgreSQL 14.0到17.5进行开发,最新版本为IvorySQL 4.5,基于PostgreSQL 17.5进行开发。IvorySQL 的所有版本全部都做到了向下兼容。相关版本特性可以查看 https://www.ivorysql.org/zh-CN/releases-page[官网]。 +IvorySQL基于PostgreSQL开发,版本更新频率与PostgreSQL版本更新频率保持一致,每年更新一个大版本,每季度更新一个小版本。IvorySQL目前发布的版本有1.0到4.6,分别基于PostgreSQL 14.0到17.6进行开发,最新版本为IvorySQL 4.6,基于PostgreSQL 17.6进行开发。IvorySQL 的所有版本全部都做到了向下兼容。相关版本特性可以查看 https://www.ivorysql.org/zh-CN/releases-page[官网]。 == 管理IvorySQL数据库访问 @@ -933,7 +933,7 @@ WHERE t1.unique1 < 100 AND t1.unique2 = t2.unique2 ORDER BY t1.fivethous; QUERY PLAN -------------------------------------------------------------------​-------------------------------------------------------------------​------ - Sort (cost=717.34..717.59 rows=101 width=488) (actual time=7.761..7.774 rows=100 loops=1) + Sort (cost=717.34..717.69 rows=101 width=488) (actual time=7.761..7.774 rows=100 loops=1) Sort Key: t1.fivethous Sort Method: quicksort Memory: 77kB -> Hash Join (cost=230.47..713.98 rows=101 width=488) (actual time=0.711..7.427 rows=100 loops=1) @@ -1051,7 +1051,7 @@ ROLLBACK; EXPLAIN UPDATE parent SET f2 = f2 + 1 WHERE f1 = 101; QUERY PLAN -------------------------------------------------------------------​---------------- - Update on parent (cost=0.00..24.53 rows=4 width=14) + Update on parent (cost=0.00..24.63 rows=4 width=14) Update on parent Update on child1 Update on child2 diff --git a/CN/modules/ROOT/pages/v4.6/welcome.adoc b/CN/modules/ROOT/pages/v4.6/welcome.adoc index 28affd8e..c7e7f1b5 100644 --- a/CN/modules/ROOT/pages/v4.6/welcome.adoc +++ b/CN/modules/ROOT/pages/v4.6/welcome.adoc @@ -15,4 +15,4 @@ IvorySQL 项目是瀚高软件提出的一个开源项目,旨在将 Oracle 兼 IvorySQL 开源并且可以免费使用,如果您有任何建议请联系 support@ivorysql.org == 文档下载 -https://docs.ivorysql.org/cn/ivorysql-doc/v4.5/ivorysql.pdf[IvorySQL v4.5 pdf 文档] \ No newline at end of file +https://docs.ivorysql.org/cn/ivorysql-doc/v4.6/ivorysql.pdf[IvorySQL v4.6 pdf 文档] \ No newline at end of file diff --git a/EN/antora.yml b/EN/antora.yml index ec9b2b8e..f4eabc24 100644 --- a/EN/antora.yml +++ b/EN/antora.yml @@ -1,7 +1,7 @@ name: ivorysql-doc title: IvorySQL -version: v4.5 -start_page: v4.5/welcome.adoc +version: v4.6 +start_page: v4.6/welcome.adoc asciidoc: attributes: source-language: asciidoc@ diff --git a/EN/modules/ROOT/pages/v4.6/1.adoc b/EN/modules/ROOT/pages/v4.6/1.adoc index 02cdd83a..6f93b01e 100644 --- a/EN/modules/ROOT/pages/v4.6/1.adoc +++ b/EN/modules/ROOT/pages/v4.6/1.adoc @@ -5,43 +5,59 @@ == Version Overview -[**Release date: June 04, 2025**] +[**Release date: Sept 10, 2025**] -IvorySQL 4.5, based on PostgreSQL 17.5 and includes a variety of bug fixes. For a comprehensive list of updates, please visit our https://docs.ivorysql.org/[documentation site]. +IvorySQL 4.6, based on PostgreSQL 17.6 and includes a variety of bug fixes. For a comprehensive list of updates, please visit our https://docs.ivorysql.org/[documentation site]. == Enhancements & Fixed Issue -- PostgreSQL 17.5 Enhancements +- PostgreSQL 17.6 Enhancements -1. Avoid one-byte buffer overread when examining invalidly-encoded strings that are claimed to be in GB18030 encoding. -2. Handle self-referential foreign keys on partitioned tables correctly. -3. Avoid data loss when merging compressed BRIN summaries in brin_bloom_union(). -4. Correctly process references to outer CTE names that appear within a WITH clause attached to an INSERT/UPDATE/DELETE/MERGE command that's inside WITH. -5. Fix ALTER TABLE ADD COLUMN to correctly handle the case of a domain type that has a default. +1. Tighten security checks in planner estimation functions. +2. Prevent pg_dump scripts from being used to attack the user running the restore. +3. Convert newlines to spaces in names included in comments in pg_dump output. +4. Fix incorrect distance calculation in BRIN numeric_minmax_multi_ops support function. +5. Avoid regression in the size of XML input that we will accept. + -For further details, visit https://www.postgresql.org/docs/release/17.5/[PostgreSQL’s release notes]. +For further details, visit https://www.postgresql.org/docs/release/17.6/[PostgreSQL’s release notes]. -- IvorySQL 4.5 +- IvorySQL 4.6 New Features -1. MIPS Packaging for All Platforms: Feature https://github.com/IvorySQL/IvorySQL/issues/736[#736] +1. Upgrade to PG 17.6 kernel + +2. MongoDB-compatible solution ++ +Provide a MongoDB-compatible solution using FerretDB and DocumentDB. + +3. LoongArch Packaging for All Platforms + -Provides multi-platform media packages for MIPS architecture, supporting both domestic and international mainstream operating systems, including Red Hat, Debian, Kylin, UOS, and NSAR OS, etc. +Provides multi-platform media packages for LoongArch architecture, supporting both domestic and international mainstream operating systems, including Red Hat, Debian, Kylin, UOS, and NSAR OS, etc. It also supports x86, ARM, and MIPS architectures. -2. IvorySQL Online trail: Feature https://github.com/IvorySQL/ivorysql-wasm/issues/1[#1] +4. IvorySQL Online trail + -Provide users with a web-based platform to experience IvorySQL V4.5 in an online environment, enabling database interaction directly through a browser interface. +Provide users with a web-based platform to experience IvorySQL V4.6 in an online environment, enabling database interaction directly through a browser interface. -3. Add code of conduct: Feature https://github.com/IvorySQL/IvorySQL/issues/808[#808] +5. Containerized Deployment Support (Docker Swarm) ++ +Supports deployment of standalone IvorySQL databases and high-availability clusters in Docker Swarm environments. -4. Update the community contribution guide: Feature https://github.com/IvorySQL/ivorysql_docs/pull/121[#121] +6. Containerized Deployment Support (Kubernetes) ++ +Supports deployment of standalone IvorySQL databases and high-availability clusters on Kubernetes (K8S) using Helm. -5. Automate Documentation Build and Website Update via Pull Requests: Feature https://github.com/IvorySQL/ivorysql_docs/issues/115[#115] +7. https://github.com/IvorySQL/ivory-cloud/releases/tag/ivyc_4.0[IvorySQL Cloud v4.0] released. ++ +The IvorySQL Cloud platform currently supports subscription management for IvorySQL v4 databases, as well as comprehensive management of its surrounding ecosystem. -6. Enhanced Contributor Workflow: Self-Assign Issues by using the '/assign' command: Feature https://github.com/IvorySQL/ivorysql_docs/issues/109[#109] +- IvorySQL 4.6 Fixed Issues -7. IvorySQL Operator V4 has been adapted to support IvorySQL 4.5, with upgrades to system component versions and database extension versions : Feature https://github.com/IvorySQL/ivory-operator/pull/79[#79] +1. Missing libcrypt on aarch64 platform. +2. prefix test_ extension are wrongly compiled and installed while exec make and make install. +3. Doc:fix some typos. +4. Doc:Fix document errors in the installation section. +5. Doc:Update the community contribution process. == Source Code @@ -54,23 +70,29 @@ IvorySQL's development is maintained across two main repositories: The following individuals (in alphabetical order) have contributed to this release as patch authors, committers, reviewers, testers, or reporters of issues. -* Cary Huang -* Denis Lussier +* caffiendo +* Cédric Villemain * Fawei Zhao -* Flyingbeecd +* flyingbeecd * Ge Sui * Grant Zhou -* Hulin Ji -* Hope Gao -* Lily Wang -* Renli Zou +* huchangqiqi +* Pedro Lopez +* RRRRhl +* Ruohang Feng +* shangwei007 * Shawn Yan +* Shaolin Chu * Shihua Yang * Shiji Niu -* Shoubo Wang * Shuntian Jiao +* tiankongbuqi * Xiangyu Liang * Xinjie Lv +* Xueyu Gao +* Yanliang Lei +* Yasir Hussain Shah +* Yuan Li * Zheng Tao * Zhenhao Pan * Zhuoyan Shi \ No newline at end of file diff --git a/EN/modules/ROOT/pages/v4.6/10.adoc b/EN/modules/ROOT/pages/v4.6/10.adoc index 0a5ee555..3fa82c1a 100644 --- a/EN/modules/ROOT/pages/v4.6/10.adoc +++ b/EN/modules/ROOT/pages/v4.6/10.adoc @@ -459,7 +459,7 @@ $ createdb orcl $ psql -psql (17.5) +psql (17.6) Type "help" for help. @@ -488,7 +488,7 @@ Create SH, HR, SCOTT users: ``` $ psql orcl -psql (17.5) +psql (17.6) Type "help" for help. diff --git a/EN/modules/ROOT/pages/v4.6/12.adoc b/EN/modules/ROOT/pages/v4.6/12.adoc index a0f1ca5c..bc8fa8b1 100644 --- a/EN/modules/ROOT/pages/v4.6/12.adoc +++ b/EN/modules/ROOT/pages/v4.6/12.adoc @@ -26,7 +26,7 @@ HNSW (Hierarchical Navigating Small World) is a graph-based indexing algorithm c == Installation [TIP] ==== -The IvorySQL 4.5(above version) has been installed in the environment, and the installation path is /usr/local/ivorysql/ivorysql-4 +The IvorySQL 4.6(above version) has been installed in the environment, and the installation path is /usr/local/ivorysql/ivorysql-4 ==== === Source Code Installation @@ -52,7 +52,7 @@ sudo --preserve-env=PG_CONFIG make install ** Create pgvector extension ``` [ivorysql@localhost ivorysql-4]$ psql -psql (17.5) +psql (17.6) Type "help" for help. ivorysql=# create extension vector; diff --git a/EN/modules/ROOT/pages/v4.6/2.adoc b/EN/modules/ROOT/pages/v4.6/2.adoc index 4a45da36..fca4a2e3 100644 --- a/EN/modules/ROOT/pages/v4.6/2.adoc +++ b/EN/modules/ROOT/pages/v4.6/2.adoc @@ -63,16 +63,16 @@ IvorySQL is a powerful open source object-relational database management system == Compatibility with Oracle -* https://docs.ivorysql.org/en/ivorysql-doc/v4.5/v4.5/14[1. Ivorysql frame design] -* https://docs.ivorysql.org/en/ivorysql-doc/v4.5/v4.5/15[2. GUC Framework] -* https://docs.ivorysql.org/en/ivorysql-doc/v4.5/v4.5/16[3. Case conversion] -* https://docs.ivorysql.org/en/ivorysql-doc/v4.5/v4.5/17[4. Dual-mode design] -* https://docs.ivorysql.org/en/ivorysql-doc/v4.5/v4.5/18[5. Compatible with Oracle like] -* https://docs.ivorysql.org/en/ivorysql-doc/v4.5/v4.5/19[6. Compatible with Oracle anonymous block] -* https://docs.ivorysql.org/en/ivorysql-doc/v4.5/v4.5/20[7. Compatible with Oracle functions and stored procedures] -* https://docs.ivorysql.org/en/ivorysql-doc/v4.5/v4.5/21[8. Built-in data types and built-in functions] -* https://docs.ivorysql.org/en/ivorysql-doc/v4.5/v4.5/22[9. Added Oracle compatibility mode ports and IP] -* https://docs.ivorysql.org/en/ivorysql-doc/v4.5/v4.5/26[10. XML Function] -* https://docs.ivorysql.org/en/ivorysql-doc/v4.5/v4.5/27[11. Compatible with Oracle sequence] -* https://docs.ivorysql.org/en/ivorysql-doc/v4.5/v4.5/28[12. Package] -* https://docs.ivorysql.org/en/ivorysql-doc/v4.5/v4.5/29[13. Invisible Columns] \ No newline at end of file +* https://docs.ivorysql.org/en/ivorysql-doc/v4.6/v4.6/14[1. Ivorysql frame design] +* https://docs.ivorysql.org/en/ivorysql-doc/v4.6/v4.6/15[2. GUC Framework] +* https://docs.ivorysql.org/en/ivorysql-doc/v4.6/v4.6/16[3. Case conversion] +* https://docs.ivorysql.org/en/ivorysql-doc/v4.6/v4.6/17[4. Dual-mode design] +* https://docs.ivorysql.org/en/ivorysql-doc/v4.6/v4.6/18[5. Compatible with Oracle like] +* https://docs.ivorysql.org/en/ivorysql-doc/v4.6/v4.6/19[6. Compatible with Oracle anonymous block] +* https://docs.ivorysql.org/en/ivorysql-doc/v4.6/v4.6/20[7. Compatible with Oracle functions and stored procedures] +* https://docs.ivorysql.org/en/ivorysql-doc/v4.6/v4.6/21[8. Built-in data types and built-in functions] +* https://docs.ivorysql.org/en/ivorysql-doc/v4.6/v4.6/22[9. Added Oracle compatibility mode ports and IP] +* https://docs.ivorysql.org/en/ivorysql-doc/v4.6/v4.6/26[10. XML Function] +* https://docs.ivorysql.org/en/ivorysql-doc/v4.6/v4.6/27[11. Compatible with Oracle sequence] +* https://docs.ivorysql.org/en/ivorysql-doc/v4.6/v4.6/28[12. Package] +* https://docs.ivorysql.org/en/ivorysql-doc/v4.6/v4.6/29[13. Invisible Columns] \ No newline at end of file diff --git a/EN/modules/ROOT/pages/v4.6/23.adoc b/EN/modules/ROOT/pages/v4.6/23.adoc index 6a3e859c..8b916d1e 100644 --- a/EN/modules/ROOT/pages/v4.6/23.adoc +++ b/EN/modules/ROOT/pages/v4.6/23.adoc @@ -29,7 +29,7 @@ Our team is a continuously open team, focusing on parts of IvorySQL. In our team == **Contributor's Guide** -Before contributing, we need to know the current version of IvorySQL and the version of the document.At present, we maintain versions after version *4.5*. Our version follows the update pace of PG. Please update to the latest version before contributing. After that, we need to read the format requirements carefully and be familiar with code format, code comment format, issue format, pull PR title format, document contribution format, and article contribution format. These can help you become a contributor of IvorySQL as soon as possible. +Before contributing, we need to know the current version of IvorySQL and the version of the document.At present, we maintain versions after version *4.6*. Our version follows the update pace of PG. Please update to the latest version before contributing. After that, we need to read the format requirements carefully and be familiar with code format, code comment format, issue format, pull PR title format, document contribution format, and article contribution format. These can help you become a contributor of IvorySQL as soon as possible. === Preparation before Contribution diff --git a/EN/modules/ROOT/pages/v4.6/3.adoc b/EN/modules/ROOT/pages/v4.6/3.adoc index 3a8ee5f1..cc61c002 100644 --- a/EN/modules/ROOT/pages/v4.6/3.adoc +++ b/EN/modules/ROOT/pages/v4.6/3.adoc @@ -50,7 +50,7 @@ gpgcheck=0 ``` After saving and exiting, you can install IvorySQL 4 with the following steps ``` -$ sudo dnf install -y ivorysql4-4.5 +$ sudo dnf install -y ivorysql4-4.6 ``` [[setting-environment-variables]] @@ -105,19 +105,19 @@ ivorysql 3238 1551 0 20:35 pts/0 00:00:00 grep --color=auto postgres ** Get IvorySQL image from Docker Hub ``` -$ docker pull ivorysql/ivorysql:4.5-ubi8 +$ docker pull ivorysql/ivorysql:4.6-ubi8 ``` ** Running IvorySQL ``` -$ docker run --name ivorysql -p 5434:5432 -e IVORYSQL_PASSWORD=your_password -d ivorysql/ivorysql:4.5-ubi8 +$ docker run --name ivorysql -p 5434:5432 -e IVORYSQL_PASSWORD=your_password -d ivorysql/ivorysql:4.6-ubi8 ``` ** Check if the IvorySQL container is running successfully ``` $ docker ps | grep ivorysql CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -6faa2d0ed705 ivorysql:4.5-ubi8 "docker-entrypoint.s…" 50 seconds ago Up 49 seconds 5866/tcp, 0.0.0.0:5434->5432/tcp ivorysql +6faa2d0ed705 ivorysql:4.6-ubi8 "docker-entrypoint.s…" 50 seconds ago Up 49 seconds 5866/tcp, 0.0.0.0:5434->5432/tcp ivorysql ``` == Connecting to IvorySQL @@ -125,7 +125,7 @@ CONTAINER ID IMAGE COMMAND CREATED ST Connect to IovrySQL via psql: ``` $ psql -d -psql (17.5) +psql (17.6) Type "help" for help. ivorysql=# @@ -138,4 +138,4 @@ TIP: When running IvorySQL in Docker, additional parameters need to be added, li Now you can start your journey of IvorySQL! Enjoy! -To explore additional installation methods, please refer to the xref:v4.5/6.adoc[Installation]. +To explore additional installation methods, please refer to the xref:v4.6/6.adoc[Installation]. diff --git a/EN/modules/ROOT/pages/v4.6/6.adoc b/EN/modules/ROOT/pages/v4.6/6.adoc index cebfda7b..66d9da28 100644 --- a/EN/modules/ROOT/pages/v4.6/6.adoc +++ b/EN/modules/ROOT/pages/v4.6/6.adoc @@ -15,7 +15,7 @@ The installation methods for IvorySQL include the following five: - <> -This chapter will provide detailed instructions on the installation, execution, and uninstallation processes for each method. For a quicker access to IvorySQL, please refer to xref:v4.5/3.adoc#quick-installation[Quick installation]. +This chapter will provide detailed instructions on the installation, execution, and uninstallation processes for each method. For a quicker access to IvorySQL, please refer to xref:v4.6/3.adoc#quick-installation[Quick installation]. Before getting started, please create an user and grant it root privileges. All the installation steps will be performed by this user. Here we just name it 'ivorysql'. @@ -33,7 +33,7 @@ gpgcheck=0 ``` After saving and exiting, you can install IvorySQL 4 with the following steps ``` -$ sudo dnf install -y ivorysql4-4.5 +$ sudo dnf install -y ivorysql4-4.6 ``` [[Docker-installation]] @@ -41,12 +41,12 @@ $ sudo dnf install -y ivorysql4-4.5 ** Get IvorySQL image from Docker Hub ``` -$ docker pull ivorysql/ivorysql:4.5-ubi8 +$ docker pull ivorysql/ivorysql:4.6-ubi8 ``` ** Run IvorySQL ``` -$ docker run --name ivorysql -p 5434:5432 -e IVORYSQL_PASSWORD=your_password -d ivorysql/ivorysql:4.5-ubi8 +$ docker run --name ivorysql -p 5434:5432 -e IVORYSQL_PASSWORD=your_password -d ivorysql/ivorysql:4.6-ubi8 ``` -e Parameter Explanation |==== @@ -74,7 +74,7 @@ $ sudo dnf install -y lz4 libicu libxslt python3 ``` ** Getting rpms ``` -$ sudo wget https://github.com/IvorySQL/IvorySQL/releases/download/IvorySQL_4.5/IvorySQL-4.5-a50789d-20250304.x86_64.rpm +$ sudo wget https://github.com/IvorySQL/IvorySQL/releases/download/IvorySQL_4.6/IvorySQL-4.6-a50789d-20250304.x86_64.rpm ``` ** Installing rpms @@ -139,12 +139,12 @@ $ sudo apt -y install pkg-config libreadline-dev libicu-dev libldap2-dev uuid-de ** Getting deb ``` -$ sudo wget https://github.com/IvorySQL/IvorySQL/releases/download/IvorySQL_4.5/IvorySQL-4.5-a50789d-20250304.amd64.deb +$ sudo wget https://github.com/IvorySQL/IvorySQL/releases/download/IvorySQL_4.6/IvorySQL-4.6-a50789d-20250304.amd64.deb ``` ** Installing deb ``` -$ sudo dpkg -i IvorySQL-4.5-a50789d-20250304.amd64.deb +$ sudo dpkg -i IvorySQL-4.6-a50789d-20250304.amd64.deb ``` IvorySQL will then be installed in the /usr/ivory-4/ directory. @@ -213,7 +213,7 @@ ivorysql 130445 130274 0 02:45 pts/1 00:00:00 grep --color=auto postgres Connect to IovrySQL via psql: ``` $ psql -d -psql (17.5) +psql (17.6) Type "help" for help. ivorysql=# @@ -237,7 +237,7 @@ No matter which method is used for the uninstallation, make sure the service has Run the following commands in turn and clean the residual folders: ``` -$ sudo dnf remove -y ivorysql4-4.5 +$ sudo dnf remove -y ivorysql4-4.6 ``` === Uninstallation for docker installation @@ -246,7 +246,7 @@ Stop IvorySQL container and remove IvorySQL image: ``` $ docker stop ivorysql $ docker rm ivorysql -$ docker rmi ivorysql/ivorysql:4.5-ubi8 +$ docker rmi ivorysql/ivorysql:4.6-ubi8 ``` === Uninstallation for rpm installation @@ -254,7 +254,7 @@ $ docker rmi ivorysql/ivorysql:4.5-ubi8 Uninstall the rpms and clear the residual folders: ``` $ sudo yum remove --disablerepo=* ivorysql4\* -$ sudo rm -rf IvorySQL-4.5 +$ sudo rm -rf IvorySQL-4.6 ``` === Uninstallation for source code installation @@ -263,13 +263,13 @@ Uninstall the database system, then clear the residual folders: ``` $ sudo make uninstall $ make clean -$ sudo rm -rf IvorySQL-4.5 +$ sudo rm -rf IvorySQL-4.6 ``` === Uninstallation for deb installation Uninstall the database system, then clear the residual folders: ``` -$ sudo dpkg -P IvorySQL-4.5 -$ sudo rm -rf IvorySQL-4.5 +$ sudo dpkg -P IvorySQL-4.6 +$ sudo rm -rf IvorySQL-4.6 ``` diff --git a/EN/modules/ROOT/pages/v4.6/7.adoc b/EN/modules/ROOT/pages/v4.6/7.adoc index b7358ffc..b82af15f 100644 --- a/EN/modules/ROOT/pages/v4.6/7.adoc +++ b/EN/modules/ROOT/pages/v4.6/7.adoc @@ -8,9 +8,9 @@ This chapter is a demo to show you how to build an IvorySQL cluster. Just take a == Primary node === Installing and start database -For quick database installation by yum, please refer to xref:v4.5/3.adoc#quick-installation[Quick installation]。 +For quick database installation by yum, please refer to xref:v4.6/3.adoc#quick-installation[Quick installation]。 -For more installation options, please refer to xref:v4.5/6.adoc#Installation[Installation]。 +For more installation options, please refer to xref:v4.6/6.adoc#Installation[Installation]。 [NOTE] The master node database needs to be installed and **started**. @@ -55,9 +55,9 @@ $ pg_ctl restart == Standby node === Installing database -For quick database installation by yum, please refer to xref:v4.5/3.adoc#quick-installation[Quick installation]。 +For quick database installation by yum, please refer to xref:v4.6/3.adoc#quick-installation[Quick installation]。 -For more installation options, please refer to xref:v4.5/6.adoc#Installation[Installation]。 +For more installation options, please refer to xref:v4.6/6.adoc#Installation[Installation]。 [NOTE] The standby node database only needs to be installed and **not started**. @@ -117,7 +117,7 @@ ivorysql 6567 6139 0 21:54 ? 00:00:00 postgres: walreceiver streaming On the primary node, connect to IvorySQL and show the status: ``` $ psql -d ivorysql -psql (17.5) +psql (17.6) Type "help" for help. ivorysql=# select * from pg_stat_replication; @@ -141,7 +141,7 @@ All writing operations are performed on the primary node, while reading can be o Below is an example. Create a new database test on primary and query: ``` $ psql -d ivorysql -psql (17.5) +psql (17.6) Type "help" for help. ivorysql=# create database test; @@ -161,7 +161,7 @@ ivorysql=# \l Query on the standby node: ``` $ psql -d ivorysql -psql (17.5) +psql (17.6) Type "help" for help. ivorysql=# \l diff --git a/EN/modules/ROOT/pages/v4.6/8.adoc b/EN/modules/ROOT/pages/v4.6/8.adoc index 5ef2e35b..a7fc7673 100644 --- a/EN/modules/ROOT/pages/v4.6/8.adoc +++ b/EN/modules/ROOT/pages/v4.6/8.adoc @@ -2092,7 +2092,7 @@ Named and mixed call notations currently cannot be used when calling an aggregat **Refer to:** -- [GUC Variables](https://docs.ivorysql.org/en/ivorysql-doc/v4.5/v4.5/15) +- [GUC Variables](https://docs.ivorysql.org/en/ivorysql-doc/v4.6/v4.6/15) === Changing tables diff --git a/EN/modules/ROOT/pages/v4.6/9.adoc b/EN/modules/ROOT/pages/v4.6/9.adoc index 7219a129..ba94f9e5 100644 --- a/EN/modules/ROOT/pages/v4.6/9.adoc +++ b/EN/modules/ROOT/pages/v4.6/9.adoc @@ -87,7 +87,7 @@ This upgrade method can be used with built-in logical replication tools and exte == Managing IvorySQL Versions -IvorySQL is based on PostgreSQL and is updated at the same frequency as PostgreSQL, with one major release per year and one minor release per quarter. IvorySQL 4.5 is based on PostgreSQL 17.5, and all versions of IvorySQL are backward compatible.The relevant version features can be viewed by looking at https://www.ivorysql.org/en/releases-page/[Official Website]。 +IvorySQL is based on PostgreSQL and is updated at the same frequency as PostgreSQL, with one major release per year and one minor release per quarter. IvorySQL 4.6 is based on PostgreSQL 17.6, and all versions of IvorySQL are backward compatible.The relevant version features can be viewed by looking at https://www.ivorysql.org/en/releases-page/[Official Website]。 == Managing IvorySQL database access @@ -898,7 +898,7 @@ WHERE t1.unique1 < 100 AND t1.unique2 = t2.unique2 ORDER BY t1.fivethous; QUERY PLAN -------------------------------------------------------------------​-------------------------------------------------------------------​------ - Sort (cost=717.34..717.59 rows=101 width=488) (actual time=7.761..7.774 rows=100 loops=1) + Sort (cost=717.34..717.69 rows=101 width=488) (actual time=7.761..7.774 rows=100 loops=1) Sort Key: t1.fivethous Sort Method: quicksort Memory: 77kB -> Hash Join (cost=230.47..713.98 rows=101 width=488) (actual time=0.711..7.427 rows=100 loops=1) @@ -1016,7 +1016,7 @@ When an `UPDATE` or `DELETE` command affects an inheritance hierarchy, the outpu EXPLAIN UPDATE parent SET f2 = f2 + 1 WHERE f1 = 101; QUERY PLAN -------------------------------------------------------------------​---------------- - Update on parent (cost=0.00..24.53 rows=4 width=14) + Update on parent (cost=0.00..24.63 rows=4 width=14) Update on parent Update on child1 Update on child2 diff --git a/EN/modules/ROOT/pages/v4.6/welcome.adoc b/EN/modules/ROOT/pages/v4.6/welcome.adoc index 0df78662..97a2f093 100644 --- a/EN/modules/ROOT/pages/v4.6/welcome.adoc +++ b/EN/modules/ROOT/pages/v4.6/welcome.adoc @@ -15,4 +15,4 @@ IvorySQL project is an open source project proposed by Highgo Software to add th It is Apache licensed Open Source and always free to use. Any comments please contact support@ivorysql.org == Docs Download -https://docs.ivorysql.org/en/ivorysql-doc/v4.5/ivorysql.pdf[IvorySQL v4.5 pdf documentation] +https://docs.ivorysql.org/en/ivorysql-doc/v4.6/ivorysql.pdf[IvorySQL v4.6 pdf documentation] diff --git a/README_zh.md b/README_zh.md index c9e1bf1a..7ece2aa2 100644 --- a/README_zh.md +++ b/README_zh.md @@ -100,7 +100,7 @@ antora -v 然后耐心等待,当成功运行结束后,你就可以到../demo 中查看自己生成的网页了。 -检查之后,你就可以开始提交[PR](https://github.com/IvorySQL/ivorysql_docs/blob/v4.5/CN/modules/ROOT/pages/v4.5/32.adoc),感谢您对社区的贡献^ _ ^,我们会在审核过后,考虑是否更新网站。 +检查之后,你就可以开始提交[PR](https://github.com/IvorySQL/ivorysql_docs/blob/v4.6/CN/modules/ROOT/pages/v4.6/32.adoc),感谢您对社区的贡献^ _ ^,我们会在审核过后,考虑是否更新网站。 ## Autobuild From c35f4d49bb01c580f94e121d75bd3b936c9543e2 Mon Sep 17 00:00:00 2001 From: JiaoShuntian Date: Wed, 10 Sep 2025 13:24:32 +0800 Subject: [PATCH 2/2] add containerization --- CN/modules/ROOT/nav.adoc | 3 + CN/modules/ROOT/pages/v4.6/37.adoc | 240 +++++++++++++++++++++++++++++ CN/modules/ROOT/pages/v4.6/38.adoc | 206 +++++++++++++++++++++++++ EN/modules/ROOT/nav.adoc | 3 + EN/modules/ROOT/pages/v4.6/37.adoc | 239 ++++++++++++++++++++++++++++ EN/modules/ROOT/pages/v4.6/38.adoc | 204 ++++++++++++++++++++++++ 6 files changed, 895 insertions(+) create mode 100644 CN/modules/ROOT/pages/v4.6/37.adoc create mode 100644 CN/modules/ROOT/pages/v4.6/38.adoc create mode 100644 EN/modules/ROOT/pages/v4.6/37.adoc create mode 100644 EN/modules/ROOT/pages/v4.6/38.adoc diff --git a/CN/modules/ROOT/nav.adoc b/CN/modules/ROOT/nav.adoc index 2ae0655c..d2a499b9 100644 --- a/CN/modules/ROOT/nav.adoc +++ b/CN/modules/ROOT/nav.adoc @@ -8,6 +8,9 @@ * IvorySQL高级 ** xref:v4.6/6.adoc[安装指南] ** xref:v4.6/7.adoc[集群搭建] +** 容器化指南 +*** xref:v4.6/37.adoc[K8S部署] +*** xref:v4.6/38.adoc[Docker Swarm & Docker Compose部署] ** xref:v4.6/8.adoc[开发者指南] ** xref:v4.6/9.adoc[运维管理指南] ** xref:v4.6/10.adoc[迁移指南] diff --git a/CN/modules/ROOT/pages/v4.6/37.adoc b/CN/modules/ROOT/pages/v4.6/37.adoc new file mode 100644 index 00000000..639042f0 --- /dev/null +++ b/CN/modules/ROOT/pages/v4.6/37.adoc @@ -0,0 +1,240 @@ + +:sectnums: +:sectnumlevels: 5 + += k8s部署单机容器和高可用集群 + +== 单机容器 +进入k8s集群的master节点上,创建名为ivorysql的namespace +``` +[root@k8s-master ~]# kubectl create ns ivorysql +``` + +下载最新docker_library代码 +``` +[root@k8s-master ~]# git clone https://github.com/IvorySQL/docker_library.git +``` + +进入单机目录 +``` +[root@k8s-master ~]# cd docker_library/k8s-cluster/single +[root@k8s-master single]# vim statefulset.yaml #根据个人环境自行修改statefulset中的pvc信息及数据库密码 +``` + +使用statefulset.yaml创建一个单机pod +``` +[root@k8s-master single]# kubectl apply -f statefulset.yaml +service/ivorysql-svc created +statefulset.apps/ivorysql created +``` + +等待pod创建成功 +``` +[root@k8s-master single]# kubectl get all -n ivorysql +NAME READY STATUS RESTARTS AGE +pod/ivorysql-0 0/1 ContainerCreating 0 47s + +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +service/ivorysql-svc NodePort 10.108.178.236 5432:32106/TCP,1521:31887/TCP 47s + +NAME READY AGE +statefulset.apps/ivorysql 0/1 47s +[root@k8s-master single]# kubectl get all -n ivorysql +NAME READY STATUS RESTARTS AGE +pod/ivorysql-0 1/1 Running 0 2m39s + +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +service/ivorysql-svc NodePort 10.108.178.236 5432:32106/TCP,1521:31887/TCP 2m39s + +NAME READY AGE +statefulset.apps/ivorysql 1/1 2m39s +``` + +psql连接IvorySQL的PG端口 +``` +[root@k8s-master single]# psql -U ivorysql -p 32106 -h 127.0.0.1 -d ivorysql +Password for user ivorysql: + +ivorysql=# select version(); + version +------------------------------------------------------------------------------------------------------------------------ + PostgreSQL 17.6 (IvorySQL 4.6) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-28), 64-bit +(1 row) + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + pg +(1 row) + +ivorysql=# exit +``` + +psql连接IvorySQL的Oracle端口 +``` +[root@k8s-master single]# psql -U ivorysql -p 31887 -h 127.0.0.1 -d ivorysql +Password for user ivorysql: + +ivorysql=# select version(); + version +------------------------------------------------------------------------------------------------------------------------ + PostgreSQL 17.6 (IvorySQL 4.6) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-28), 64-bit +(1 row) + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + oracle +(1 row) +``` + +卸载单机容器 +``` +[root@k8s-master single]# kubectl delete-f statefulset.yaml +``` + +== 高可用集群 + +进入k8s集群的master节点上,创建名为ivorysql的namespace +``` +[root@k8s-master ~]# kubectl create ns ivorysql +``` + +下载最新docker_library代码 +``` +[root@k8s-master ~]# git clone https://github.com/IvorySQL/docker_library.git +``` + +进入高可用集群目录 +``` +[root@k8s-master ~]# cd docker_library/k8s-cluster/ha-cluster/helm_charts +[root@k8s-master single]# vim values.yaml #根据个人环境自行values.yaml中的pvc信息及集群规模等信息,数据库密码查看templates/secret.yaml并自行修改。 +``` + +使用 https://helm.sh/docs/intro/install/[Helm] 命令部署高可用集群 +``` +[root@k8s-master helm_charts]# helm install ivorysql-ha-cluster -n ivorysql . +NAME: ivorysql-ha-cluster +LAST DEPLOYED: Wed Sep 10 09:45:36 2025 +NAMESPACE: ivorysql +STATUS: deployed +REVISION: 1 +TEST SUITE: None +[root@k8s-master helm_charts]# kubectl get all -n ivorysql +NAME READY STATUS RESTARTS AGE +pod/ivorysql-patroni-hac-0 1/1 Running 0 42s +pod/ivorysql-patroni-hac-1 0/1 Running 0 18s + +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +service/ivorysql-patroni-hac NodePort 10.96.119.203 5432:32391/TCP,1521:32477/TCP 42s +service/ivorysql-patroni-hac-config ClusterIP None 42s +service/ivorysql-patroni-hac-pods ClusterIP None 42s +service/ivorysql-patroni-hac-repl NodePort 10.100.122.0 5432:30111/TCP,1521:32654/TCP 42s + +NAME READY AGE +statefulset.apps/ivorysql-patroni-hac 1/3 42s +``` + +等待所有pod均运行成功,集群部署成功 +``` +[root@k8s-master helm_charts]# kubectl get all -n ivorysql +NAME READY STATUS RESTARTS AGE +pod/ivorysql-patroni-hac-0 1/1 Running 0 88s +pod/ivorysql-patroni-hac-1 1/1 Running 0 64s +pod/ivorysql-patroni-hac-2 1/1 Running 0 41s + +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +service/ivorysql-patroni-hac NodePort 10.96.119.203 5432:32391/TCP,1521:32477/TCP 88s +service/ivorysql-patroni-hac-config ClusterIP None 88s +service/ivorysql-patroni-hac-pods ClusterIP None 88s +service/ivorysql-patroni-hac-repl NodePort 10.100.122.0 5432:30111/TCP,1521:32654/TCP 88s +NAME READY AGE +statefulset.apps/ivorysql-patroni-hac 3/3 88s +``` + +使用psql连接集群主节点的PG、Oracle端口 +``` +[root@k8s-master helm_charts]# psql -U ivorysql -p 32391 -h 127.0.0.1 -d ivorysql +Password for user ivorysql: + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + pg +(1 row) + +ivorysql=# SELECT pg_is_in_recovery(); + pg_is_in_recovery +------------------- + f +(1 row) + +ivorysql=# exit +[root@k8s-master helm_charts]# psql -U ivorysql -p 32477 -h 127.0.0.1 -d ivorysql +Password for user ivorysql: + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + oracle +(1 row) + +ivorysql=# SELECT pg_is_in_recovery(); + pg_is_in_recovery +------------------- + f +(1 row) + +ivorysql=# +``` + +使用psql连接集群备节点的PG、Oracle端口 +``` +[root@k8s-master helm_charts]# psql -U ivorysql -p 30111 -h 127.0.0.1 -d ivorysql +Password for user ivorysql: + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + pg +(1 row) + +ivorysql=# SELECT pg_is_in_recovery(); + pg_is_in_recovery +------------------- + t +(1 row) + +ivorysql=# exit + +[root@k8s-master helm_charts]# psql -U ivorysql -p 32654 -h 127.0.0.1 -d ivorysql +Password for user ivorysql: + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + oracle +(1 row) + +ivorysql=# SELECT pg_is_in_recovery(); + pg_is_in_recovery +------------------- + t +(1 row) + +ivorysql=# +``` + +卸载高可用集群 +``` +[root@k8s-master helm_charts]# helm uninstall ivorysql-ha-cluster -n ivorysql +``` +删除PVC +``` +[root@k8s-master helm_charts]# kubectl delete pvc ivyhac-config-ivorysql-patroni-hac-0 -n ivorysql +[root@k8s-master helm_charts]# kubectl delete pvc ivyhac-config-ivorysql-patroni-hac-1 -n ivorysql +[root@k8s-master helm_charts]# kubectl delete pvc ivyhac-config-ivorysql-patroni-hac-2 -n ivorysql +[root@k8s-master helm_charts]# kubectl delete pvc pgdata-ivorysql-patroni-hac-0 -n ivorysql +[root@k8s-master helm_charts]# kubectl delete pvc pgdata-ivorysql-patroni-hac-1 -n ivorysql +[root@k8s-master helm_charts]# kubectl delete pvc pgdata-ivorysql-patroni-hac-2 -n ivorysql +``` \ No newline at end of file diff --git a/CN/modules/ROOT/pages/v4.6/38.adoc b/CN/modules/ROOT/pages/v4.6/38.adoc new file mode 100644 index 00000000..97d944c2 --- /dev/null +++ b/CN/modules/ROOT/pages/v4.6/38.adoc @@ -0,0 +1,206 @@ + +:sectnums: +:sectnumlevels: 5 + += Docker Swarm & Docker Compose 部署IvorySQL高可用集群 + +准备三个网络互通的服务器,并搭建swarm集群。 +测试集群名称及对应ip地址如下: + +manager-node1: 192.168.21.205 + +manager-node2: 192.168.21.164 + +manager-node3: 192.168.21.51 + +``` +[root@manager-node1 docker-swarm]# docker node ls +ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION +y9d9wd9t2ncy4t9bvw6bg9sjs * manager-node1 Ready Active Reachable 26.1.4 +iv17o6m9t9e06vd9iu1o6damd manager-node2 Ready Active Leader 25.0.4 +vjnax76qj812mlvut6cv4qotl manager-node3 Ready Active Reachable 24.0.6 +``` + +== docker swarm搭建IvorySQL HA Cluster +下载源码 +``` +[root@manager-node1 ~]# git clone https://github.com/IvorySQL/docker_library.git +[root@manager-node1 ~]# cd docker_library/docker-cluster/docker-swarm +``` + +部署一个三节点的etcd +``` +[root@manager-node1 docker-swarm]# docker stack deploy -c docker-swarm-etcd.yml ivoryhac-etcd +Creating network ivoryhac-etcd_etcd-net +Creating service ivoryhac-etcd_etcd3 +Creating service ivoryhac-etcd_etcd1 +Creating service ivoryhac-etcd_etcd2 +[root@manager-node1 docker-swarm]# docker service ls +ID NAME MODE REPLICAS IMAGE PORTS +1jst0mva8o5n ivoryhac-etcd_etcd1 replicated 1/1 quay.io/coreos/etcd:v3.5.8 *:2379-2380->2379-2380/tcp +sosag5017cis ivoryhac-etcd_etcd2 replicated 1/1 quay.io/coreos/etcd:v3.5.8 +8twpgkzo2mnx ivoryhac-etcd_etcd3 replicated 1/1 quay.io/coreos/etcd:v3.5.8 +``` + +部署IvorySQL高可用集群 +``` +[root@manager-node1 docker-swarm]# docker stack deploy -c docker-swarm-ivypatroni.yml ivoryhac-patroni +Since --detach=false was not specified, tasks will be created in the background. +In a future release, --detach=false will become the default. +Creating service ivoryhac-patroni_ivypatroni1 +Creating service ivoryhac-patroni_ivypatroni2 +[root@manager-node1 docker-swarm]# docker service ls +ID NAME MODE REPLICAS IMAGE PORTS +1jst0mva8o5n ivoryhac-etcd_etcd1 replicated 1/1 quay.io/coreos/etcd:v3.5.8 *:2379-2380->2379-2380/tcp +sosag5017cis ivoryhac-etcd_etcd2 replicated 1/1 quay.io/coreos/etcd:v3.5.8 +8twpgkzo2mnx ivoryhac-etcd_etcd3 replicated 1/1 quay.io/coreos/etcd:v3.5.8 +uzdvjq5j2gwt ivorysql-hac_ivypatroni1 replicated 1/1 ivorysql/docker-swarm-ha-cluster:4.6-4.0.6-ubi8 *:1521->1521/tcp, *:5866->5866/tcp +fr0m9chu3ce8 ivorysql-hac_ivypatroni2 replicated 1/1 ivorysql/docker-swarm-ha-cluster:4.6-4.0.6-ubi8 *:1522->1521/tcp, *:5867->5866/tcp +``` + +psql连接数据库的Oracle端口及PG端口 +``` +[root@manager-node1 docker-swarm]# psql -h127.0.0.1 -p1521 -U ivorysql -d ivorysql +Password for user ivorysql: + +ivorysql=# select version(); + version +------------------------------------------------------------------------------------------------------------------------ + PostgreSQL 17.6 (IvorySQL 4.6) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-28), 64-bit +(1 row) + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + oracle +(1 row) + +ivorysql=# exit +[root@manager-node1 docker-swarm]# psql -h127.0.0.1 -p5432 -U ivorysql -d ivorysql +Password for user ivorysql: + +ivorysql=# select version(); + version +------------------------------------------------------------------------------------------------------------------------ + PostgreSQL 17.6 (IvorySQL 4.6) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-28), 64-bit +(1 row) + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + pg +(1 row) +``` + +卸载IvorySQL集群 +``` +[root@manager-node1 ~] docker stack rm ivoryhac-patroni +[root@manager-node1 ~] docker stack rm ivoryhac-etcd +``` + +== docker compose搭建IvorySQL HA Cluster + +下载源码 +``` +[root@manager-node1 ~]# git clone https://github.com/IvorySQL/docker_library.git +[root@manager-node1 ~]# cd docker_library/docker-cluster/docker-compose +``` +拷贝文件至其他服务器 + +将etcd和ivypatroni的docker-compose文件,分别拷贝到其他服务器上。 + +如测试服务器: + +192.168.21.205 存放etcd1+ivorypatroni1, + +192.168.21.164 存放etcd2+ivorypatroni2, + +192.168.21.51 存放etcd3+ivorypatroni3 + +部署一个三节点的etcd,以node1为例 +``` +[root@manager-node1 docker-compose]# docker-compose -f ./docker-compose-etcd1.yml up -d +[+] Running 1/1 + ✔ Container etcd Started 0.1s + +``` +当所有节点均部署完成后,检查etcd集群状态 +``` +[root@manager-node1 docker-compose]# docker exec -it etcd etcdctl --write-out=table --endpoints="192.168.21.205:2379,192.168.21.164:2379,192.168.21.51:2379" endpoint status ++---------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ +| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS | ++---------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ +| 192.168.21.205:2379 | 10574d87df892440 | 3.5.8 | 20 kB | true | false | 2 | 13 | 13 | | +| 192.168.21.164:2379 | a47a4fd720eb36e7 | 3.5.8 | 20 kB | false | false | 2 | 13 | 13 | | +| 192.168.21.51:2379 | b76a77d78fdf886f | 3.5.8 | 20 kB | false | false | 2 | 13 | 13 | | ++---------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ +``` +部署IvorySQL高可用集群 + +在每个节点上,部署ivyhac服务 +以node1为例 +``` +[root@manager-node1 docker-compose]# docker-compose -f ./docker-compose-ivypatroni_1.yml up -d +[+] Running 1/1 + ✔ Container ivyhac1 Started 0.1s +[root@manager-node1 docker-compose]# docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +736c0d188bdd ivorysql/docker-compose-ha-cluster:4.6-4.0.6-ubi8 "/bin/sh /docker-ent…" 18 seconds ago Up 17 seconds ivyhac1 +9d8e04e4f819 quay.io/coreos/etcd:v3.5.8 "/usr/local/bin/etcd" 24 minutes ago Up 24 minutes etcd + +``` +待所有节点部署完毕后,检查IvorySQL集群状态 +``` +[root@manager-node1 docker-compose]# docker exec -it ivyhac1 /bin/bash +[ivorysql@manager-node1 /]$ patronictl -c $PATRONICONF/patroni.yml list ++ Cluster: ivory-cluster (7548337408295624728) ------+----+-----------+ +| Member | Host | Role | State | TL | Lag in MB | ++-------------+----------------+---------+-----------+----+-----------+ +| ivypatroni1 | 192.168.21.205 | Leader | running | 1 | | +| ivypatroni2 | 192.168.21.164 | Replica | streaming | 1 | 0 | +| ivypatroni3 | 192.168.21.51 | Replica | streaming | 1 | 0 | ++-------------+----------------+---------+-----------+----+-----------+ + +``` +此时,一主两备集群搭建完成 +psql连接数据库的Oracle端口及PG端口 +``` +[root@manager-node1 docker-swarm]# psql -h127.0.0.1 -p1521 -U ivorysql -d ivorysql +Password for user ivorysql: + +ivorysql=# select version(); + version +------------------------------------------------------------------------------------------------------------------------ + PostgreSQL 17.6 (IvorySQL 4.6) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-28), 64-bit +(1 row) + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + oracle +(1 row) + +ivorysql=# exit +[root@manager-node1 docker-swarm]# psql -h127.0.0.1 -p5432 -U ivorysql -d ivorysql +Password for user ivorysql: + +ivorysql=# select version(); + version +------------------------------------------------------------------------------------------------------------------------ + PostgreSQL 17.6 (IvorySQL 4.6) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-28), 64-bit +(1 row) + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + pg +(1 row) + +``` + +卸载IvorySQL集群 +以node1为例 +``` +[root@manager-node1 ~] docker-compose -f ./docker-compose-ivypatroni_1.yml down +[root@manager-node1 ~] docker-compose -f ./docker-compose-etcd1.yml down +``` \ No newline at end of file diff --git a/EN/modules/ROOT/nav.adoc b/EN/modules/ROOT/nav.adoc index 515ed37e..4edb0c81 100644 --- a/EN/modules/ROOT/nav.adoc +++ b/EN/modules/ROOT/nav.adoc @@ -8,6 +8,9 @@ * IvorySQL Advanced Feature ** xref:v4.6/6.adoc[Installation] ** xref:v4.6/7.adoc[Building Cluster] +** Containerization +*** xref:v4.6/37.adoc[K8S] +*** xref:v4.6/38.adoc[Docker Swarm & Docker Compose] ** xref:v4.6/8.adoc[Developer] ** xref:v4.6/9.adoc[Operation Management] ** xref:v4.6/10.adoc[Migration] diff --git a/EN/modules/ROOT/pages/v4.6/37.adoc b/EN/modules/ROOT/pages/v4.6/37.adoc new file mode 100644 index 00000000..2e15ba35 --- /dev/null +++ b/EN/modules/ROOT/pages/v4.6/37.adoc @@ -0,0 +1,239 @@ + +:sectnums: +:sectnumlevels: 5 + += Deploying single-node containers and high-availability clusters on k8s + +== Single-node container +On the master node of the k8s cluster, create a namespace named ivorysql. +``` +[root@k8s-master ~]# kubectl create ns ivorysql +``` + +Download the latest docker_library code. +``` +[root@k8s-master ~]# git clone https://github.com/IvorySQL/docker_library.git +``` + +Enter the single-node directory +``` +[root@k8s-master ~]# cd docker_library/k8s-cluster/single +[root@k8s-master single]# vim statefulset.yaml #Modify the PVC information and database password in the StatefulSet according to your personal environment. +``` + +Use statefulset.yaml to create a single-node pod. +``` +[root@k8s-master single]# kubectl apply -f statefulset.yaml +service/ivorysql-svc created +statefulset.apps/ivorysql created +``` + +Wait for the single-node pod to be successfully created. +``` +[root@k8s-master single]# kubectl get all -n ivorysql +NAME READY STATUS RESTARTS AGE +pod/ivorysql-0 0/1 ContainerCreating 0 47s + +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +service/ivorysql-svc NodePort 10.108.178.236 5432:32106/TCP,1521:31887/TCP 47s + +NAME READY AGE +statefulset.apps/ivorysql 0/1 47s +[root@k8s-master single]# kubectl get all -n ivorysql +NAME READY STATUS RESTARTS AGE +pod/ivorysql-0 1/1 Running 0 2m39s + +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +service/ivorysql-svc NodePort 10.108.178.236 5432:32106/TCP,1521:31887/TCP 2m39s + +NAME READY AGE +statefulset.apps/ivorysql 1/1 2m39s +``` + +Connect to IvorySQL's PostgreSQL Port Using psql +``` +[root@k8s-master single]# psql -U ivorysql -p 32106 -h 127.0.0.1 -d ivorysql +Password for user ivorysql: + +ivorysql=# select version(); + version +------------------------------------------------------------------------------------------------------------------------ + PostgreSQL 17.6 (IvorySQL 4.6) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-28), 64-bit +(1 row) + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + pg +(1 row) + +ivorysql=# exit +``` + +Connecting to IvorySQL's Oracle-Compatible Port Using psqlConnecting to IvorySQL's Oracle-Compatible Port Using psql +``` +[root@k8s-master single]# psql -U ivorysql -p 31887 -h 127.0.0.1 -d ivorysql +Password for user ivorysql: + +ivorysql=# select version(); + version +------------------------------------------------------------------------------------------------------------------------ + PostgreSQL 17.6 (IvorySQL 4.6) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-28), 64-bit +(1 row) + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + oracle +(1 row) +``` + +Uninstall Single-node container +``` +[root@k8s-master single]# kubectl delete-f statefulset.yaml +``` + +== High Availability Cluster + +Access the master node of the k8s cluster and create a namespace named ivorysql. +``` +[root@k8s-master ~]# kubectl create ns ivorysql +``` + +Download the latest docker_library code. +``` +[root@k8s-master ~]# git clone https://github.com/IvorySQL/docker_library.git +``` + +Enter the high-availability cluster directory. +``` +[root@k8s-master ~]# cd docker_library/k8s-cluster/ha-cluster/helm_charts +[root@k8s-master single]# vim values.yaml #Adjust the PVC settings, cluster size, and other configurations in values.yaml according to your environment. For the database password, check templates/secret.yaml and modify it as needed. +``` + +Deploy the high-availability cluster using https://helm.sh/docs/intro/install/[Helm] commands. +``` +[root@k8s-master helm_charts]# helm install ivorysql-ha-cluster -n ivorysql . +NAME: ivorysql-ha-cluster +LAST DEPLOYED: Wed Sep 10 09:45:36 2025 +NAMESPACE: ivorysql +STATUS: deployed +REVISION: 1 +TEST SUITE: None +[root@k8s-master helm_charts]# kubectl get all -n ivorysql +NAME READY STATUS RESTARTS AGE +pod/ivorysql-patroni-hac-0 1/1 Running 0 42s +pod/ivorysql-patroni-hac-1 0/1 Running 0 18s + +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +service/ivorysql-patroni-hac NodePort 10.96.119.203 5432:32391/TCP,1521:32477/TCP 42s +service/ivorysql-patroni-hac-config ClusterIP None 42s +service/ivorysql-patroni-hac-pods ClusterIP None 42s +service/ivorysql-patroni-hac-repl NodePort 10.100.122.0 5432:30111/TCP,1521:32654/TCP 42s + +NAME READY AGE +statefulset.apps/ivorysql-patroni-hac 1/3 42s +``` + +Wait until all pods are running successfully, indicating the cluster deployment is complete. +``` +[root@k8s-master helm_charts]# kubectl get all -n ivorysql +NAME READY STATUS RESTARTS AGE +pod/ivorysql-patroni-hac-0 1/1 Running 0 88s +pod/ivorysql-patroni-hac-1 1/1 Running 0 64s +pod/ivorysql-patroni-hac-2 1/1 Running 0 41s + +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +service/ivorysql-patroni-hac NodePort 10.96.119.203 5432:32391/TCP,1521:32477/TCP 88s +service/ivorysql-patroni-hac-config ClusterIP None 88s +service/ivorysql-patroni-hac-pods ClusterIP None 88s +service/ivorysql-patroni-hac-repl NodePort 10.100.122.0 5432:30111/TCP,1521:32654/TCP 88s +NAME READY AGE +statefulset.apps/ivorysql-patroni-hac 3/3 88s +``` +Connect to the PostgreSQL and Oracle ports of the cluster's primary node using psql. +``` +[root@k8s-master helm_charts]# psql -U ivorysql -p 32391 -h 127.0.0.1 -d ivorysql +Password for user ivorysql: + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + pg +(1 row) + +ivorysql=# SELECT pg_is_in_recovery(); + pg_is_in_recovery +------------------- + f +(1 row) + +ivorysql=# exit +[root@k8s-master helm_charts]# psql -U ivorysql -p 32477 -h 127.0.0.1 -d ivorysql +Password for user ivorysql: + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + oracle +(1 row) + +ivorysql=# SELECT pg_is_in_recovery(); + pg_is_in_recovery +------------------- + f +(1 row) + +ivorysql=# +``` + +Use psql to connect to the PostgreSQL and Oracle ports of the cluster's standby node. +``` +[root@k8s-master helm_charts]# psql -U ivorysql -p 30111 -h 127.0.0.1 -d ivorysql +Password for user ivorysql: + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + pg +(1 row) + +ivorysql=# SELECT pg_is_in_recovery(); + pg_is_in_recovery +------------------- + t +(1 row) + +ivorysql=# exit + +[root@k8s-master helm_charts]# psql -U ivorysql -p 32654 -h 127.0.0.1 -d ivorysql +Password for user ivorysql: + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + oracle +(1 row) + +ivorysql=# SELECT pg_is_in_recovery(); + pg_is_in_recovery +------------------- + t +(1 row) + +ivorysql=# +``` + +Uninstall high-availability cluster +``` +[root@k8s-master helm_charts]# helm uninstall ivorysql-ha-cluster -n ivorysql +``` +Remove PVC +``` +[root@k8s-master helm_charts]# kubectl delete pvc ivyhac-config-ivorysql-patroni-hac-0 -n ivorysql +[root@k8s-master helm_charts]# kubectl delete pvc ivyhac-config-ivorysql-patroni-hac-1 -n ivorysql +[root@k8s-master helm_charts]# kubectl delete pvc ivyhac-config-ivorysql-patroni-hac-2 -n ivorysql +[root@k8s-master helm_charts]# kubectl delete pvc pgdata-ivorysql-patroni-hac-0 -n ivorysql +[root@k8s-master helm_charts]# kubectl delete pvc pgdata-ivorysql-patroni-hac-1 -n ivorysql +[root@k8s-master helm_charts]# kubectl delete pvc pgdata-ivorysql-patroni-hac-2 -n ivorysql +``` \ No newline at end of file diff --git a/EN/modules/ROOT/pages/v4.6/38.adoc b/EN/modules/ROOT/pages/v4.6/38.adoc new file mode 100644 index 00000000..6177f104 --- /dev/null +++ b/EN/modules/ROOT/pages/v4.6/38.adoc @@ -0,0 +1,204 @@ + +:sectnums: +:sectnumlevels: 5 + += Docker Swarm & Docker Compose Deploying IvorySQL High Availability Cluster + +Prepare three servers with network connectivity and set up a Swarm cluster. +The test cluster names and corresponding IP addresses are as follows: + +manager-node1: 192.168.21.205 + +manager-node2: 192.168.21.164 + +manager-node3: 192.168.21.51 + +``` +[root@manager-node1 docker-swarm]# docker node ls +ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION +y9d9wd9t2ncy4t9bvw6bg9sjs * manager-node1 Ready Active Reachable 26.1.4 +iv17o6m9t9e06vd9iu1o6damd manager-node2 Ready Active Leader 25.0.4 +vjnax76qj812mlvut6cv4qotl manager-node3 Ready Active Reachable 24.0.6 +``` + +== Building IvorySQL HA Cluster using Docker Swarm +Download the source code +``` +[root@manager-node1 ~]# git clone https://github.com/IvorySQL/docker_library.git +[root@manager-node1 ~]# cd docker_library/docker-cluster/docker-swarm +``` + +Deploy a three-node etcd cluster +``` +[root@manager-node1 docker-swarm]# docker stack deploy -c docker-swarm-etcd.yml ivoryhac-etcd +Creating network ivoryhac-etcd_etcd-net +Creating service ivoryhac-etcd_etcd3 +Creating service ivoryhac-etcd_etcd1 +Creating service ivoryhac-etcd_etcd2 +[root@manager-node1 docker-swarm]# docker service ls +ID NAME MODE REPLICAS IMAGE PORTS +1jst0mva8o5n ivoryhac-etcd_etcd1 replicated 1/1 quay.io/coreos/etcd:v3.5.8 *:2379-2380->2379-2380/tcp +sosag5017cis ivoryhac-etcd_etcd2 replicated 1/1 quay.io/coreos/etcd:v3.5.8 +8twpgkzo2mnx ivoryhac-etcd_etcd3 replicated 1/1 quay.io/coreos/etcd:v3.5.8 +``` + +Deploy an IvorySQL High Availability Cluster +``` +[root@manager-node1 docker-swarm]# docker stack deploy -c docker-swarm-ivypatroni.yml ivoryhac-patroni +Since --detach=false was not specified, tasks will be created in the background. +In a future release, --detach=false will become the default. +Creating service ivoryhac-patroni_ivypatroni1 +Creating service ivoryhac-patroni_ivypatroni2 +[root@manager-node1 docker-swarm]# docker service ls +ID NAME MODE REPLICAS IMAGE PORTS +1jst0mva8o5n ivoryhac-etcd_etcd1 replicated 1/1 quay.io/coreos/etcd:v3.5.8 *:2379-2380->2379-2380/tcp +sosag5017cis ivoryhac-etcd_etcd2 replicated 1/1 quay.io/coreos/etcd:v3.5.8 +8twpgkzo2mnx ivoryhac-etcd_etcd3 replicated 1/1 quay.io/coreos/etcd:v3.5.8 +uzdvjq5j2gwt ivorysql-hac_ivypatroni1 replicated 1/1 ivorysql/docker-swarm-ha-cluster:4.6-4.0.6-ubi8 *:1521->1521/tcp, *:5866->5866/tcp +fr0m9chu3ce8 ivorysql-hac_ivypatroni2 replicated 1/1 ivorysql/docker-swarm-ha-cluster:4.6-4.0.6-ubi8 *:1522->1521/tcp, *:5867->5866/tcp +``` + +Connect to the database using psql via Oracle port and PostgreSQL port +``` +[root@manager-node1 docker-swarm]# psql -h127.0.0.1 -p1521 -U ivorysql -d ivorysql +Password for user ivorysql: + +ivorysql=# select version(); + version +------------------------------------------------------------------------------------------------------------------------ + PostgreSQL 17.6 (IvorySQL 4.6) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-28), 64-bit +(1 row) + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + oracle +(1 row) + +ivorysql=# exit +[root@manager-node1 docker-swarm]# psql -h127.0.0.1 -p5432 -U ivorysql -d ivorysql +Password for user ivorysql: + +ivorysql=# select version(); + version +------------------------------------------------------------------------------------------------------------------------ + PostgreSQL 17.6 (IvorySQL 4.6) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-28), 64-bit +(1 row) + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + pg +(1 row) +``` + +Uninstall the IvorySQL cluster +``` +[root@manager-node1 ~] docker stack rm ivoryhac-patroni +[root@manager-node1 ~] docker stack rm ivoryhac-etcd +``` + +== Set up an IvorySQL HA Cluster using Docker Compose + +Download the source code +``` +[root@manager-node1 ~]# git clone https://github.com/IvorySQL/docker_library.git +[root@manager-node1 ~]# cd docker_library/docker-cluster/docker-compose +``` +Copy files to another server + +Copy the etcd and ivypatroni Docker Compose files to other servers respectively. + +For example, to the test server: + +192.168.21.205 will host etcd1+ivorypatroni1, + +192.168.21.164 will host etcd2+ivorypatroni2, + +192.168.21.51 will host etcd3+ivorypatroni3 + +Deploy a three-node etcd cluster, taking node1 as an example +``` +[root@manager-node1 docker-compose]# docker-compose -f ./docker-compose-etcd1.yml up -d +[+] Running 1/1 + ✔ Container etcd Started 0.1s + +``` +After all nodes are deployed, check the status of the etcd cluster. +``` +[root@manager-node1 docker-compose]# docker exec -it etcd etcdctl --write-out=table --endpoints="192.168.21.205:2379,192.168.21.164:2379,192.168.21.51:2379" endpoint status ++---------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ +| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS | ++---------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ +| 192.168.21.205:2379 | 10574d87df892440 | 3.5.8 | 20 kB | true | false | 2 | 13 | 13 | | +| 192.168.21.164:2379 | a47a4fd720eb36e7 | 3.5.8 | 20 kB | false | false | 2 | 13 | 13 | | +| 192.168.21.51:2379 | b76a77d78fdf886f | 3.5.8 | 20 kB | false | false | 2 | 13 | 13 | | ++---------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+ +``` +Deploy an IvorySQL high-availability cluster. + +Deploy the ivyhac service on each node, using node1 as an example. +``` +[root@manager-node1 docker-compose]# docker-compose -f ./docker-compose-ivypatroni_1.yml up -d +[+] Running 1/1 + ✔ Container ivyhac1 Started 0.1s +[root@manager-node1 docker-compose]# docker ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +736c0d188bdd ivorysql/docker-compose-ha-cluster:4.6-4.0.6-ubi8 "/bin/sh /docker-ent…" 18 seconds ago Up 17 seconds ivyhac1 +9d8e04e4f819 quay.io/coreos/etcd:v3.5.8 "/usr/local/bin/etcd" 24 minutes ago Up 24 minutes etcd + +``` +After all nodes are deployed, check the status of the IvorySQL cluster. +``` +[root@manager-node1 docker-compose]# docker exec -it ivyhac1 /bin/bash +[ivorysql@manager-node1 /]$ patronictl -c $PATRONICONF/patroni.yml list ++ Cluster: ivory-cluster (7548337408295624728) ------+----+-----------+ +| Member | Host | Role | State | TL | Lag in MB | ++-------------+----------------+---------+-----------+----+-----------+ +| ivypatroni1 | 192.168.21.205 | Leader | running | 1 | | +| ivypatroni2 | 192.168.21.164 | Replica | streaming | 1 | 0 | +| ivypatroni3 | 192.168.21.51 | Replica | streaming | 1 | 0 | ++-------------+----------------+---------+-----------+----+-----------+ + +``` +At this point, the one-primary-two-standby cluster setup is complete. +Connect to the database using psql via Oracle-compatible ports and PostgreSQL ports. +``` +[root@manager-node1 docker-swarm]# psql -h127.0.0.1 -p1521 -U ivorysql -d ivorysql +Password for user ivorysql: + +ivorysql=# select version(); + version +------------------------------------------------------------------------------------------------------------------------ + PostgreSQL 17.6 (IvorySQL 4.6) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-28), 64-bit +(1 row) + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + oracle +(1 row) + +ivorysql=# exit +[root@manager-node1 docker-swarm]# psql -h127.0.0.1 -p5432 -U ivorysql -d ivorysql +Password for user ivorysql: + +ivorysql=# select version(); + version +------------------------------------------------------------------------------------------------------------------------ + PostgreSQL 17.6 (IvorySQL 4.6) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-28), 64-bit +(1 row) + +ivorysql=# show ivorysql.compatible_mode; + ivorysql.compatible_mode +-------------------------- + pg +(1 row) + +``` + +Uninstall the IvorySQL cluster, using node1 as an example. +``` +[root@manager-node1 ~] docker-compose -f ./docker-compose-ivypatroni_1.yml down +[root@manager-node1 ~] docker-compose -f ./docker-compose-etcd1.yml down +``` \ No newline at end of file