From cf4cf3f94c3ac321979f9a6d18a0573bded006da Mon Sep 17 00:00:00 2001 From: "yongjiang.qi" Date: Wed, 2 Apr 2025 14:38:49 +0800 Subject: [PATCH] =?UTF-8?q?feat(mogdb)=EF=BC=9A=E6=96=B0=E5=A2=9EMogDB=205?= =?UTF-8?q?.0.11=E5=8F=91=E5=B8=83=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- product/en/docs-mogdb/v5.0/toc_about.md | 1 + .../about-mogdb/mogdb-new-feature/5.0.11.md | 100 ++++++++++++++++++ .../mogdb-new-feature/release-note.md | 1 + .../oracle-trigger-syntax-compatibility.md | 70 ++++++++++++ .../support-inserting-garbled-characters.md | 68 ++++++++++++ .../logical-decoding-support-for-DDL.md | 40 +++++-- product/zh/docs-mogdb/v5.0/toc.md | 1 + product/zh/docs-mogdb/v5.0/toc_about.md | 1 + 8 files changed, 276 insertions(+), 6 deletions(-) create mode 100644 product/zh/docs-mogdb/v5.0/about-mogdb/mogdb-new-feature/5.0.11.md create mode 100644 product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/oracle-trigger-syntax-compatibility.md create mode 100644 product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/support-inserting-garbled-characters.md diff --git a/product/en/docs-mogdb/v5.0/toc_about.md b/product/en/docs-mogdb/v5.0/toc_about.md index 7eeb7a38..dcd4cf74 100644 --- a/product/en/docs-mogdb/v5.0/toc_about.md +++ b/product/en/docs-mogdb/v5.0/toc_about.md @@ -7,6 +7,7 @@ + [MogDB Introduction](/overview.md) + [Comparison Between MogDB and openGauss](/about-mogdb/MogDB-compared-to-openGauss.md) + [MogDB Release Notes](/about-mogdb/mogdb-new-feature/release-note.md) + + [MogDB 5.0.11](/about-mogdb/mogdb-new-feature/5.0.11.md) + [MogDB 5.0.10](/about-mogdb/mogdb-new-feature/5.0.10.md) + [MogDB 5.0.9](/about-mogdb/mogdb-new-feature/5.0.9.md) + [MogDB 5.0.8](/about-mogdb/mogdb-new-feature/5.0.8.md) diff --git a/product/zh/docs-mogdb/v5.0/about-mogdb/mogdb-new-feature/5.0.11.md b/product/zh/docs-mogdb/v5.0/about-mogdb/mogdb-new-feature/5.0.11.md new file mode 100644 index 00000000..12730b72 --- /dev/null +++ b/product/zh/docs-mogdb/v5.0/about-mogdb/mogdb-new-feature/5.0.11.md @@ -0,0 +1,100 @@ +--- +title: MogDB 5.0.11 +summary: MogDB 5.0.11 +author: qiyongjiang +date: 2025-03-31 +--- + +# MogDB 5.0.11 + +## 1. 版本说明 + +MogDB 5.0.11是MogDB 5.0.0的补丁版本,于2025-04-03发布,其在MogDB 5.0.10的基础上新增了部分特性并修复了部分缺陷,内容如下: + +
+ +## 2. 新增特性 + +### 2.1 存储过程支持sql语句分析 + +支持在DBE_PERF.pg_stat_activity表中展示SQL的执行计划和存储过程内部正在执行的SQL。存储过程执行中定位当前执行语句, 在一个存储过程执行过程中,可以通过查询pg_stat_activity系统表,来查看正在执行的语句是哪一个。存储过程结束后通过statement_history查询历史慢sql, 会将时间执行计划等信息存入到statement_history中,慢sql的判断标准由log_min_duration_statement参数控制。 +支持在DBE_PERF.statement_history记录存储过程中的sql语句与相关信息。该表的使用参见以下页面: + +**相关页面**:[STATEMENT_HISTORY](../../reference-guide/schema/DBE_PERF/query/STATEMENT_HISTORY_query.md) + + 以下内容需要注意: + +- 此表必须在postgres库内查询,其它库中不存数据。 + +- 此系统表受track_stmt_stat_level控制,默认为"OFF,L0",第一部分控制Full SQL,第二部分控制Slow SQL。 + set track_stmt_stat_level = 'L1,L1'; + set instr_unique_sql_track_type = 'all'; + 此时记录所有的sql。 + set track_stmt_stat_level = 'OFF,L1'; + 此时仅记录slow sql。 + set track_stmt_stat_level = 'OFF, L2'; + 此时在以上的基础上,还记录部分锁的信息。 +- 对于Slow SQL,当track_stmt_stat_level的值为非OFF时,且SQL执行时间超过log_min_duration_statement,会记录为慢SQL。 + +### 2.2 兼容性增强 + +1. 支持插入非法字符以及 C 风格字符串结束符 '\0',通过设置 GUC 参数 `enable_compatible_illegal_chars` 开启本功能。 + + **相关页面**:[支持插入部分乱码字符](../../characteristic-description/compatibility/support-inserting-garbled-characters.md) + +2. trigger 语法兼容性增强,支持 Oracle 风格的匿名块方式创建,支持 referencing 等语法,通过设置 GUC 参数 `enable_ora_trigger_style` 开启本功能。 + + **相关页面**:[Oracle trigger语法兼容性增强](../../characteristic-description/compatibility/oracle-trigger-syntax-compatibility.md) + +3. 支持 ROWID 伪列,ROWID来自 “tableoid+ctid” 合并计算,在事务内可保证 ROWID 的唯一性,即使被更新的行,通过原 ROWID 也可正常查询到。 + +4. 支持 ALTER TABLE xxx DROP PRIMARY KEY CASCADE DROP INDEX 语法,通过 DROP PRIMARY KEY 自动定位并删除主键约束,提升操作效率。 + +5. 增加 DBMS_STATS.GATHER_TABLE_STATS 函数接口,可通过更新表的统计信息间接优化查询性能,当执行大规模数据加载后,表数据分布可能发生显著变化,通过调用 GATHER_TABLE_STATS 函数更新指定表的统计信息,避免查询性能下降。还可在业务低峰期通过定时任务自动收集统计信息,确保日常查询性能的稳定;通过合理使用 DBMS_STATS.GATHER_TABLE_STATS,可显著提升数据库性能并减少人工调优成本。 + +6. 支持的 `exit` 命令,通过 gsql 或工具连接到数据库并完成操作后,退出会话可使用原始的 `\q` 和 `\quit` 命令,也可使用新增支持的 `exit` 和 `quit` 命令,提升兼容性。 + +7. 增强 `current_timestamp` 函数支持时分秒,通过设置GUC参数 `a_format_date_timestamp = true` 开启本功能。 + +8. 支持记录同义词及触发器的创建和修改时间,当用户创建或者修改触发器或同义词时,会将修改操作记录到 pg_object 系统表,用户可以通过查询 pg_object 系统表获取这两个数据库对象的变更历史。 + +### 2.3 UStore特性增强 + +1. Ustore 支持向量化查询,可显著提升大数据量下分析查询场景的性能,并支持根据执行计划的代价评估结果,动态决定是否使用向量化查询。 + +2. Ustore 支持全局临时表,允许在Ustore存储引擎上创建全局临时表,全局临时表对所有会话可见,但每个会话只能操作自己提交的数据。 + +3. 优化 Ustore 表在数据删除场景下的空间回收效率,即使存在长事务,依然可以回收空间。优化后可以大幅降低 Ustore 表在数据删除场景下的空间占用,特定场景下可以下降到优化前的 10% 以下;同时还能避免无效数据的扫描,提升Scan查询的性能。 + +4. 逻辑复制支持对Ustore表的DDL操作,确保目标库的表结构和源库保持一致,避免源库DDL操作导致逻辑复制中断或者数据不一致。 + **相关页面**:[逻辑复制支持DDL操作](../../developer-guide/logical-replication/logical-decoding/logical-decoding-support-for-DDL.md) + +
+ +## 3. 修复缺陷 + +1. 【9986】修复了B模式下MogDB定时任务的开始时间存在误差的问题。 + +2. 【9920】修复了在大数据量下,进行树形查询会越来越慢的问题。 + +3. 【9943】修复了使用db link 连接Oracle 导致数据库宕机的问题。 + +4. 【9889】修复了在存在分区表的场景下执行ALTER ... SET AUTO_INCREMENT = 1 会报错的问题。 + +5. 【5931】修复了B模式下显式指定指定collate区分大小写后,无法再次更改为不区分大小写的问题。 + +6. 【10062】修复了plsql中open cursor,对于for update的表没有加上锁,和ORACLE表现不一致的问题。 + +7. 【10356】修复了使用增量备份恢复,极低概率存在恢复出来的数据包含之前已删除的数据的问题。 + +8. 【10336】修复了打开 implicit savepoint 功能后,纯查询出现内存泄漏的问题。 + +9. 【10194】修复了使用postgres_fdw查询比gsql查询慢的问题。 + +10. 【10038】修复了B模式创建定时任务,执行一会儿后数据库会重启的问题。 + +11. 【9944】修复了startwith语句在where子查询中使用from子查询中字段报错的问题。 + +12. 【10515】支持了非B模式下使用group_concat。 + +13. 【10316】修复了whale插件dbms_random包返回的随机数都是固定值的问题。 diff --git a/product/zh/docs-mogdb/v5.0/about-mogdb/mogdb-new-feature/release-note.md b/product/zh/docs-mogdb/v5.0/about-mogdb/mogdb-new-feature/release-note.md index 1f62eab1..05bb2991 100644 --- a/product/zh/docs-mogdb/v5.0/about-mogdb/mogdb-new-feature/release-note.md +++ b/product/zh/docs-mogdb/v5.0/about-mogdb/mogdb-new-feature/release-note.md @@ -9,6 +9,7 @@ date: 2024-12-31 | 版本 | 发布日期 | 概述 | | ------------------- | ---------- | ------------------------------------------------------------ | +| [5.0.11](./5.0.11.md) | 2025/04/03 | MogDB 5.0.11在MogDB 5.0.10的基础上修复了部分缺陷,同时对Ustore做了部分增强,数据库兼容性做了提升。 | | [5.0.10](./5.0.10.md) | 2024/12/31 | MogDB 5.0.10在MogDB 5.0.9的基础上修复了部分缺陷,并新增支持匿名 plan cache 缓存等特性,同时对兼容性做了提升。 | | [5.0.9](./5.0.9.md) | 2024/10/31 | MogDB 5.0.9在MogDB 5.0.8的基础上修复了部分缺陷,并新增支持语句级PLSQL Function Cache。 | | [5.0.8](./5.0.8.md) | 2024/07/31 | MogDB 5.0.8版本在MogDB 5.0.7的基础上修复了部分缺陷,新增顺序扫描预读、UStore SMP并行执行等特性,同时对兼容性、性能、易用性均做了提升。 | diff --git a/product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/oracle-trigger-syntax-compatibility.md b/product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/oracle-trigger-syntax-compatibility.md new file mode 100644 index 00000000..e6ff8cea --- /dev/null +++ b/product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/oracle-trigger-syntax-compatibility.md @@ -0,0 +1,70 @@ +--- +title: Oracle trigger语法兼容性增强 +summary: Oracle trigger语法兼容性增强 +author: 齐永江 韩旭 +date: 2025-03-27 +--- + +# 支持Oracle风格创建触发器 + +## 可获得性 + +本特性自MogDB 5.0.11版本开始引入。 + +## 特性简介 + +在以往的MogDB中,不支持Oracle风格的匿名块方式创建,不支持referencing等语法。为了补齐这部分兼容性,在5.0.11版本后可通过设置GUC参数`enable_ora_trigger_style`,开启此部分兼容性功能,具体如下: + +```sql +set enable_ora_trigger_style = on; +``` + +或在postgresql.conf文件中设置此参数并重启数据库。 + +## 客户价值 + +增强MogDB与Oracle的兼容性,减少应用程序的迁移代价。 + +## 特性描述 + +部分客户在从Oracle数据库往MogDB迁移时,存在O风格语法与MogDB不兼容,本特性主要支持创建触发器时存在部分不兼容语法场景。 + +目前支持场景: + +- 支持create or replace语法; +- 支持REFERENCING NEW AS n OLD AS o起别名,支持when中不带:new的形式(即直接new.*),when中有别名只能使用别名,begin ... end之间都可以使用; +- 兼容INSERTING、UPDATING、DELETING的case when和if; +- 支持创建trigger时后面直接跟匿名块; +- 支持alter trigger triggerName rename newName、alter trigger triggerName ENABLE/DISABLE、drop trigger triggerName语法; +- 支持直接在匿名块中return; +- 支持alter trigger triggerName compile;语法; +- 支持禁止drop procedure触发器的内置函数; +- 支持在不同schema下创建多个同名触发器; + +## 特性约束 + +1. 该功能仅在A模式下开启`enable_ora_trigger_style`参数后生效; +2. 开启该参数后在同一schema下仅支持创建一个同名触发器(兼容Oracle); +3. 暂不支持schemaName.triggerName的逻辑,逻辑查找按照当前设置的search_path为准; +4. 暂不支持该特性下创建的触发器的备份恢复功能。 + +## 示例 + +```sql +drop database if exists test_ora_style_trigger_db; +create database test_ora_style_trigger_db; +\c test_ora_style_trigger_db +set enable_ora_trigger_style = on; + +create table test_table(col1 integer, col2 integer); + +CREATE OR REPLACE TRIGGER test_trigger AFTER INSERT OR UPDATE ON test_table +REFERENCING NEW AS ncc +FOR EACH ROW +when (ncc.col1 = 1) +begin + raise info '%', :nCc.col1; + raise info '%', :ncc.col2; +end; +/ +``` \ No newline at end of file diff --git a/product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/support-inserting-garbled-characters.md b/product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/support-inserting-garbled-characters.md new file mode 100644 index 00000000..956ecc30 --- /dev/null +++ b/product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/support-inserting-garbled-characters.md @@ -0,0 +1,68 @@ +--- +title: 支持插入部分乱码字符 +summary: 支持插入部分乱码字符 +author: 韩旭 齐永江 +date: 2025-03-27 +--- + +# 支持插入部分乱码字符 + +## 可获得性 + +本特性自MogDB 5.0.11版本开始引入。 + +## 特性简介 + +在pg系数据库中,不支持插入非法字符以及C风格字符串结束符'\0'。本特性特实现该功能,增加兼容性;此功能需要在5.0.11版本后通过设置GUC参数`enable_compatible_illegal_chars`开启,方法如下: + +```sql +set enable_compatible_illegal_chars = on; +``` + +或在postgresql.conf文件中设置此参数并重启数据库。 + +## 客户价值 + +便于客户插入一些客户端自定义拼接字段值,提高兼容性,可用性。 + +## 特性描述 + +部分客户通过前端工具将逻辑上多个字段值通过0x00值拼接存储在数据库中的一个字段,如果物理拼接字段值过长,还会分别存在两个物理字段中,可能会有完整字符从字节层面被分割为半字符存储在一个字段的最后面,另一个字段的最前面;本特性增对前述场景进行适配。 + +目前支持场景: + +- 针对非法字符的词法语法解析; +- 针对非法字符的增删改查; +- 内置配套针对字符串的函数:length、lengthb、trim、substring、rawtohex; +- 针对包含非法字符的排序规则; +- 针对大多数非法字符的copy、备份恢复功能。 + +## 特性约束 + +1. 该功能仅在A模式下开启`enable_compatible_illegal_chars`参数后生效; +2. 使用like语法和text_pattern_ops仅支持对包含0x00非法字符的查找; +3. 在使用客户端ODBC支持非法字符功能时,需要在obdc.ini文件中增加`ForInvalidCharacters = 1`参数; +4. 在数据迁移时仅支持在源端和目标端字符编码相同的场景; + +## 示例 + +```sql +drop database if exists testdb_invalid_characters; +create database testdb_invalid_characters DBCOMPATIBILITY='A' ENCODING='GBK' LC_COLLATE='C' LC_CTYPE='C'; +\c testdb_invalid_characters + +set enable_compatible_illegal_chars = on; +set client_encoding = 'GBK'; + +create table t1 (c1 char(50),c2 bytea); + +insert into t1(c1) select 'aa' || cast_to_varchar2(rawsend('00')) || 'bb'; +insert into t1(c2) select 'aa'::bytea || cast_to_bytea(cast_to_varchar2(rawsend('00'))) ||'bb'::bytea; +insert into t1(c1) select 'aa' || cast_to_varchar2(rawsend('d009')) || 'bb'; +insert into t1(c2) select 'aa'::bytea || cast_to_bytea(cast_to_varchar2(rawsend('d009'))) || 'bb'::bytea; + +select * from t1; +select cast_to_bytea(c1) from t1; +select cast_to_varchar2(c2) from t1; +select c1, convert_from(c2,'GBK') from t1; +``` diff --git a/product/zh/docs-mogdb/v5.0/developer-guide/logical-replication/logical-decoding/logical-decoding-support-for-DDL.md b/product/zh/docs-mogdb/v5.0/developer-guide/logical-replication/logical-decoding/logical-decoding-support-for-DDL.md index 46eb63e5..eac87acd 100644 --- a/product/zh/docs-mogdb/v5.0/developer-guide/logical-replication/logical-decoding/logical-decoding-support-for-DDL.md +++ b/product/zh/docs-mogdb/v5.0/developer-guide/logical-replication/logical-decoding/logical-decoding-support-for-DDL.md @@ -2,7 +2,7 @@ title: 逻辑解码支持DDL操作 summary: 逻辑解码支持DDL操作 author: 郭欢 何文健 qiyongjiang -date: 2025-01-10 +date: 2025-03-31 --- # 逻辑解码支持 DDL 操作 @@ -47,17 +47,45 @@ MogDB 在逻辑解码过程中支持如下 DDL(Data Definition Language,数 - pg_xlogdump - mog_xlogdump -## 注意事项 - -- 只支持行存表的 DDL 操作。 -- 不支持列存、ustore 存储引擎。 +**5.0.11 版本后新增对UStore存储引擎表的WAL日志解析能力,支持INSERT、UPDATE、DELETE操作的 JSON 格式输出,详细参数如下:** + +- include-xids:是否在每个变更集中添加事务ID(xid)。默认值为false。 +- include-timestamp:是否为每个变更集添加时间戳。默认值为false。 +- include-schemas:是否在每次变更中添加模式(schema)名称。默认值为true。 +- include-types:是否在每次变更中添加数据类型信息。默认值为true。 +- include-typmod:是否为有修饰符的数据类型添加修饰符(例如,varchar(20)而不是varchar)。默认值为true。 +- include-type-oids:是否添加数据类型的OID。默认值为false。 +- include-domain-data-type:是否将域名替换为其底层数据类型。默认值为false。 +- include-column-positions:是否添加列位置信息(基于pg_attribute.attnum)。默认值为false。 +- include-origin:是否添加数据的来源信息。默认值为false。 +- include-not-null:是否添加非空信息作为列选项。默认值为false。 +- include-default:是否添加列的默认表达式。默认值为false。 +- include-pk:是否添加主键信息,包括列名和数据类型。默认值为false。 +- numeric-data-types-as-string:是否将数字数据类型作为字符串使用。默认值为false。 +- pretty-print:是否为JSON结构添加空格和缩进以提高可读性。默认值为false。 +- write-in-chunks:是否在每次变更后写入,而不是每个变更集结束时。默认值为false,仅当format-version为1时使用。 +- include-lsn:是否在每个变更集中添加下一个LSN。默认值为false。 +- include-transaction:是否发出表示每个事务开始和结束的记录。默认值为true。 +- filter-origins:排除指定来源的变更。默认为空,即不过滤任何来源。 +- filter-tables:排除指定表的行变更。默认为空,即不过滤任何表。 +- add-tables:仅包括指定表的行变更。默认包括所有表。 +- format-version:定义使用哪种格式。默认为1,带有ustore语句时,只支持该值为1。 +- actions:定义将发送哪些操作(insert、update、delete、truncate)。默认为所有操作。如果使用format-version 1,则不启用truncate(为了向后兼容)。 + +## Astore引擎注意事项 + +- 只支持行存表的DDL操作,不支持列存。 - 不支持临时表。 - 不支持非日志表。 - 不支持逻辑订阅。 - 当一条语句中存在多个对象,且多个对象属于不同 schema,默认按对象出现的顺序,输出其所属的 schema。 - 部分 DDL 操作语句由于内核实现原因,会产生一些无需关注的 DML 语句解析结果。(5.0.10 版本后不再产生) - GUC 参数[wal_level](../../../reference-guide/guc-parameters/write-ahead-log/settings.md#wal_level)需要>=logical,且开启[enable_ddl_logical_record](../../../reference-guide/guc-parameters/ha-replication/sending-server.md#enable_ddl_logical_record)。 -- wal2json 只支持`format-version==1`,不支持`format-version==2`。 + +## UStore引擎注意事项 + +- wal2json只支持`format-version==1`,不支持`format-version==2`。 +- 不支持truncate的解析。 ## 示例 diff --git a/product/zh/docs-mogdb/v5.0/toc.md b/product/zh/docs-mogdb/v5.0/toc.md index a9996462..c47402e4 100644 --- a/product/zh/docs-mogdb/v5.0/toc.md +++ b/product/zh/docs-mogdb/v5.0/toc.md @@ -8,6 +8,7 @@ + [MogDB简介](/overview.md) + [MogDB与openGauss](/about-mogdb/MogDB-compared-to-openGauss.md) + [MogDB发布说明](/about-mogdb/mogdb-new-feature/release-note.md) + + [MogDB 5.0.11](/about-mogdb/mogdb-new-feature/5.0.11.md) + [MogDB 5.0.10](/about-mogdb/mogdb-new-feature/5.0.10.md) + [MogDB 5.0.9](/about-mogdb/mogdb-new-feature/5.0.9.md) + [MogDB 5.0.8](/about-mogdb/mogdb-new-feature/5.0.8.md) diff --git a/product/zh/docs-mogdb/v5.0/toc_about.md b/product/zh/docs-mogdb/v5.0/toc_about.md index c8027638..0cad8155 100644 --- a/product/zh/docs-mogdb/v5.0/toc_about.md +++ b/product/zh/docs-mogdb/v5.0/toc_about.md @@ -8,6 +8,7 @@ + [MogDB简介](/overview.md) + [MogDB与openGauss](/about-mogdb/MogDB-compared-to-openGauss.md) + [MogDB发布说明](/about-mogdb/mogdb-new-feature/release-note.md) + + [MogDB 5.0.11](/about-mogdb/mogdb-new-feature/5.0.11.md) + [MogDB 5.0.10](/about-mogdb/mogdb-new-feature/5.0.10.md) + [MogDB 5.0.9](/about-mogdb/mogdb-new-feature/5.0.9.md) + [MogDB 5.0.8](/about-mogdb/mogdb-new-feature/5.0.8.md) -- Gitee