From 1370427fe8bcb8ca30b3423f47351e29435e90bf Mon Sep 17 00:00:00 2001 From: "yongjiang.qi" Date: Mon, 7 Jul 2025 11:01:56 +0800 Subject: [PATCH] =?UTF-8?q?feat(mogdb):=E6=96=B0=E5=A2=9E5.0.12=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../about-mogdb/mogdb-new-feature/5.0.12.md | 71 +++++++ .../mogdb-new-feature/release-note.md | 3 +- .../oracle-nologging-syntax-compatibility.md | 47 +++++ .../oracle-parallel-CTAS-compatibility.md | 81 ++++++++ ...ata-types-for-table-building-statements.md | 189 ++++++++++++++++++ .../oracle-trigger-syntax-compatibility.md | 21 +- .../support-inserting-garbled-characters.md | 24 ++- ...-merge-into-target-tables-as-subqueries.md | 37 ++++ .../ustore-page-consistent-read-PCR.md | 44 ++++ product/zh/docs-mogdb/v5.0/toc.md | 1 + product/zh/docs-mogdb/v5.0/toc_about.md | 1 + 11 files changed, 508 insertions(+), 11 deletions(-) create mode 100644 product/zh/docs-mogdb/v5.0/about-mogdb/mogdb-new-feature/5.0.12.md create mode 100644 product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/oracle-nologging-syntax-compatibility.md create mode 100644 product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/oracle-parallel-CTAS-compatibility.md create mode 100644 product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/oracle-storing-origin-column-data-types-for-table-building-statements.md create mode 100644 product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/support-merge-into-target-tables-as-subqueries.md create mode 100644 product/zh/docs-mogdb/v5.0/characteristic-description/high-performance/ustore-page-consistent-read-PCR.md diff --git a/product/zh/docs-mogdb/v5.0/about-mogdb/mogdb-new-feature/5.0.12.md b/product/zh/docs-mogdb/v5.0/about-mogdb/mogdb-new-feature/5.0.12.md new file mode 100644 index 00000000..07961de6 --- /dev/null +++ b/product/zh/docs-mogdb/v5.0/about-mogdb/mogdb-new-feature/5.0.12.md @@ -0,0 +1,71 @@ +--- +title: MogDB 5.0.12 +summary: MogDB 5.0.12 +author: qiyongjiang +date: 2025-07-03 +--- + +# MogDB 5.0.12 + +## 1. 版本说明 + +MogDB 5.0.12是MogDB 5.0.0的补丁版本,于2025-07-07发布,其在MogDB 5.0.11的基础上新增了部分特性并修复了部分缺陷,内容如下: + +
+ +## 2. 新增特性 + +### 2.1 兼容性增强 + +1. 新增A模式下面3种场景并行的支持,将单线程select优化为多线程select, 查询性能得到大幅提升;且增加了A模式兼容性,降低客户迁移成本。 + insert /*+ parallel(4)*/ into ... select ... + select /*+ parallel(4)*/ + create table xxx parallel 4 as select + + **相关页面**:[A模式并行CTAS语法兼容](../../characteristic-description/compatibility/oracle-parallel-CTAS-compatibility.md) + +2. trigger 语法兼容性进一步增强,在create、alter、drop时可以指定schema;pg_trigger系统表新增支持查看触发器别名信息和所在schema信息。 + + **相关页面**:[A模式trigger语法兼容性增强](../../characteristic-description/compatibility/oracle-trigger-syntax-compatibility.md) + +3. 新增兼容A模式 nologging语法,当存在大批量数据INSERT,UPDATE场景时,指定 nologging,设置表为 unlogged 表,跳过WAL日志写入,可显著提升SQL性能,降低I/O压力。 + + **相关页面**:[A模式nologging语法兼容](../../characteristic-description/compatibility/oracle-nologging-syntax-compatibility.md) + +4. 支持merge into的目标表为子查询,MERGE INTO 语句现在允许使用一个简单子查询的结果作为合并操作的目标表 (TARGET),而不仅限于物理表或视图,能够提供更大灵活性,避免创建临时表或视图,直接在 MERGE 语句中动态定义目标数据集。 + + **相关页面**:[支持merge into的目标表为子查询](../../characteristic-description/compatibility/support-merge-into-target-tables-as-subqueries.md) + +5. 支持存储建表语句原始列数据类型,增强与Oracle的兼容性,方便迁移等场景情况下的元数据比对,确保在数据仓库场景中与Oracle表现一致。通过在建表时设置参数 `enable_record_origin_column_define=on` 开启本功能。 + + **相关页面**:[A模式支持存储建表语句原始列数据类型](../../characteristic-description/compatibility/oracle-storing-origin-column-data-types-for-table-building-statements.md) + +### 2.2 UStore特性增强 + +1. 相比于MogDB USTORE存储引擎原本的行一致性读(Record Consistent Read, RCR),PCR(Page Consistent Read)特性中,扫描算子会基于快照构造一致性页面,其在扫描数据页面时以事务为单位一次性完成所有相关undo record 的应用,并缓存处理的结果到临时页面中,后续扫描操作在临时页面上完成。相比RCR,PCR避免了其在扫描时可能出现的undo record重复遍历的问题,PCR在部分查询场景下有较大的性能提升。 + + **相关页面**:[USTORE支持页面一致性读(Page Consistent Read, PCR)](../../characteristic-description/high-performance/ustore-page-consistent-read-PCR.md) + +
+ +## 3. 修复缺陷 + +1. 【10583】修复了ustore模式下,数据非原地更新后,通过旧的(更新前的)rowid无法查询到数据的问题。 + +2. 【11008】修复了ustore模式分区表查询报错问题。 + +3. 【11100】修复了ustore 的B模式下,存在触发器函数,delete数据报错的问题。 + +4. 【11076】修复了ustore模式下触发器插入数据不准确的问题。 + +5. 【10541】修复了在ustore模式下,存在AFTER ROW UPDATE Trigger时,不能原地更新导致空间膨胀的问题。 + +6. 【10621】新增支持SQL语句中,select语句后面带中文全型空格,中文逗号,中文分号。 + +7. 【10549】修复了开启线程池后,低概率导致的core问题。 + +8. 【10624】修复了执行package.function时报错找不到user_object的问题。 + +9. 【11137】修复了在开启不区分大小写(uppercase_attribute_name=on)的情况下,使用gs_dump导出的时候会导致gs_dump core的问题。 + +10. 【11094】修复了pg_probackup在指定-E (等价于 --external-dirs) 参数(external-directories-paths)时,参数内容长度超过2KB时会备份失败的问题。 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 05bb2991..75074f8c 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 @@ -2,13 +2,14 @@ title: 发布说明 summary: 发布说明 author: qi yongjiang -date: 2024-12-31 +date: 2025-07-06 --- # 发布说明 | 版本 | 发布日期 | 概述 | | ------------------- | ---------- | ------------------------------------------------------------ | +| [5.0.12](./5.0.12.md) | 2025/07/07 | MogDB 5.0.12在MogDB 5.0.11的基础上修复了部分缺陷,同时对Ustore做了部分增强,数据库兼容性做了提升。 | | [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。 | diff --git a/product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/oracle-nologging-syntax-compatibility.md b/product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/oracle-nologging-syntax-compatibility.md new file mode 100644 index 00000000..61313ce7 --- /dev/null +++ b/product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/oracle-nologging-syntax-compatibility.md @@ -0,0 +1,47 @@ +--- +title: nologging兼容Oracle +summary: nologging兼容Oracle +author: wusong 齐永江 +date: 2025-06-30 + +--- + +# 支持 Oracle nologging 语法 + +## 可获得性 + +本特性自MogDB 5.0.12版本开始引入。 + +## 特性简介 + +增加 Oracle nologging 语法支持,用户可以在建表或修改表时指定 nologging,设置表为 unlogged 表。 + +## 客户价值 + +增加了对 Oracle nologging 语法的兼容,nologging 表在数据修改时不会记录 WAL,nologging 表在写入性能上相比普通表更有优势。 + +## 特性描述 + +目前支持场景: + +- 支持建表时指定 nologging +- 支持通过 alter table 命令将已有表修改为 nologging 表 + +## 示例 + +```sql +-- 创建 nologging 表 +CREATE TABLE test(id int) nologging; + +CREATE TABLE test2 AS SELECT * FROM test nologging; + +CREATE TABLE test3(id int) TABLESPACE pg_default nologging; + +CREATE TABLE test4(id int) nologging TABLESPACE pg_default; + +-- 修改表 +CREATE TABLE test5(id int); + +ALTER TABLE test5 nologging; +ALTER TABLE test5 logging; +``` diff --git a/product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/oracle-parallel-CTAS-compatibility.md b/product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/oracle-parallel-CTAS-compatibility.md new file mode 100644 index 00000000..2e5020fa --- /dev/null +++ b/product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/oracle-parallel-CTAS-compatibility.md @@ -0,0 +1,81 @@ +--- +title: parallel(n)兼容Oracle +summary: parallel(n)兼容Oracle +author: 齐永江 岳昌应 +date: 2025-07-07 + +--- + +# parallel(n)兼容Oracle + +## 可获得性 + +本特性自MogDB 5.0.12版本开始引入。 + +## 特性简介 + +在以往的MogDB中,不支持parallel(n)设置并行的方式。为了补齐这部分兼容性,在5.0.12版本后支持该功能,具体如下: + +```sql +insert /*+ parallel(4) */ into ... select ... +select /*+ parallel(4) */ +create table xxx parallel 4 as select +``` + +上面的3种场景都需要支持并行查询 + +## 客户价值 + +增强MogDB与Oracle的兼容性,提高查询和插入性能。 + +## 特性描述 + +部分客户在从Oracle数据库往MogDB迁移时,存在O风格语法与MogDB不兼容,本特性主要支持并发查询场景。 + +目前支持场景: + +- 支持insert /*+ parallel(4)*/ into ... select ... +- 支持select /*+ parallel(4)*/ +- 支持create table xxx parallel 4 as select ... + +## 特性约束 + +该功能仅在A模式下生效。 + +## 示例 + +```sql +MogDB=# create table t_hint_10(a int, b text, c text); +CREATE TABLE +MogDB=# insert into t_hint_10 select i, 'name'||i, 'addr'||i from generate_series(1,2000000) i; +INSERT 0 2000000 +MogDB=# +MogDB=# create table t_hint_11 as select * from t_hint_10; +INSERT 0 2000000 +MogDB=# explain (costs off) insert/*+ parallel(4) */ into t_hint_11 select * from t_hint_10; +                  QUERY PLAN +---------------------------------------------- + Insert on t_hint_11 +   ->  Streaming(type: LOCAL GATHER dop: 1/4) +         ->  Seq Scan on t_hint_10 +(3 rows) + +MogDB=# explain (costs off) select /*+ parallel(4) */ * from t_hint_11; +               QUERY PLAN +---------------------------------------- + Streaming(type: LOCAL GATHER dop: 1/4) +   ->  Seq Scan on t_hint_11 +(2 rows) + +MogDB=# explain (analyze, costs off) create table t_hint_12 parallel 4 as select * from t_hint_10 where a%100=0; +                                                QUERY PLAN +----------------------------------------------------------------------------------------------------------- + Insert on t_hint_12 (actual time=[21.256,206.345]..[21.256,206.345], rows=20000) +   ->  Streaming(type: LOCAL GATHER dop: 1/4) (actual time=[21.161,151.819]..[21.161,151.819], rows=20000) +         ->  Seq Scan on t_hint_10 (actual time=[0.088,125.497]..[0.138,184.087], rows=20000) +               Filter: ((a % 100) = 0) +               Rows Removed by Filter: 1980000 + Total runtime: 207.562 ms +(6 rows) + +``` diff --git a/product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/oracle-storing-origin-column-data-types-for-table-building-statements.md b/product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/oracle-storing-origin-column-data-types-for-table-building-statements.md new file mode 100644 index 00000000..cd7da427 --- /dev/null +++ b/product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/oracle-storing-origin-column-data-types-for-table-building-statements.md @@ -0,0 +1,189 @@ +--- +title: 支持存储表的原始列定义 +summary: 支持存储表的原始列定义 +author: 刘伟 qiyongjiang +date: 2025-06-30 + +--- + +# 支持存储表的原始列定义 + +## 可获得性 + +本特性自MogDB 5.0.12版本开始引入。 + +## 特性简介 + +主要目标是从A模式迁移的数据表,到mogdb之后,可以还原出来原始的表列定义(类型定义与默认值定义)。 + +```sql +create domain long as text; +create domain BINARY_FLOAT as float4; +create domain BINARY_DOUBLE as float8; +set enable_record_origin_column_define = true; +drop table test_col_type; +CREATE TABLE test_col_type( +C_INT INT default 1, +C_REAL real default 1, +C_FLOAT FLOAT default 1, +C_DOUBLE_PRECISION DOUBLE precision default 1, +c_number number default 1, +c_number2 number(3,2) default 1, +C_DECIMAL DECIMAL(5,1) default 1, +C_BINARY_FLOAT BINARY_FLOAT default 1, +C_BINARY_DOUBLE BINARY_DOUBLE default 1, +C_DATE DATE default date'2022-01-10', +C_TIMESTAMP_WITHOUT_TIME_ZONE TIMESTAMP default date'2022-01-10', +C_TIMESTAMP_WITHOUT_TIME_ZONE_2 TIMESTAMP(2) default date'2022-01-10', +C_TIMESTAMP_WITH_TIME_ZONE TIMESTAMP WITH TIME zone default date'2022-01-10', +c_bpCHAR CHAR(2) default 'a', +c_nchar nchar(3) default 'a', +c_varchar2 VARCHAR2(8) default 'a', +v_nvarchar2 nvarchar2(10) default 'a', +c_CLOB clob default 'a', +C_LONG LONG default 'a', +c_BLOB blob default 'a', +c_RAW raw(25) default 'a', +c_date_sysdate date default sysdate, +c_date_current_date date default current_date, +c_date_current_timestamp date default current_timestamp, +c_date_current_timestamp3 date default current_timestamp(3), +c_date_null date default null, +c_number_null number default null, +c_varchar2_null varchar2(10) default null, +c_char "char" default 'a', +c_text text default 'a', +C_BOOL BOOL default false, +C_INT2 INT2 default 1, +C_INT1 INT1 default 1, +C_INT8 INT8 default 1, +C_float4 float4 default 1, +C_float8 float8 default 1, +c_varchar2_2 varchar2 default 'a' +); +``` + +使用上面的SQL创建表之后,在gs_dump出来之后,可以导出原始的类型定义,而非MogDB内部转换后的类型定义。 + +## 客户价值 + +增强与Oracle的兼容性,方便迁移等场景情况下的元数据比对,确保在数据仓库场景中与Oracle表现一致。 + +## 特性描述 + +在创建表前,打开记录参数,建表时候就会记录原始定义到元数据表,之后使用gs_dump导出,就是原始的类型定义。 + +## 新增参数 enable_record_origin_column_define + +只有在建表时候设置参数enable_record_origin_column_define为on的情况下才会记录,其他默认情况下不会记录。 + +## 支持的类型 + +1. 通用类型:类型名称(length),类型名称(n),类型名称(m,n) +2. Int类型 +3. Real类型 +4. binary_double类型 +5. double precision 类型 +6. decimal类型 +7. Number类型 +8. Float类型 +9. Float(n)类型 +10. bit varying/bit varying(n)类型 +11. Bit/bit(n)类型 +12. Char(n)类型 +13. nvarchar2(n)类型 +14. varchar2(n)类型 +15. Nchar(n)类型 +16. Timestamp(n)类型 ( 无时区定义/with time zone/without time zone) +17. date类型 + +## 支持的默认值定义形式 + +1. 字符串 +2. 数字 +3. 日期定义(date,sysdate,current_date,current_timestamp) +4. current_timestamp(n) +5. 通用类型:typename n +6. True/false + +## 支持DDL范围 + +1. 建表 create table ,create table as select(仅支持select对应列为表列的情况,不支持类型计算后的状况(如union,列运算等)) +2. 删表 +3. Alter + +(1) Add列,支持列位置定义(first,after) + +(2) Modify 修改列默认值,修改列类型 + +(3) Set default/drop default + +(4) Alter table t alter colname set type 修改列类型 + +(5) Drop 删除列 + +## gs_dump的支持 + +对于记录到的表DDL,使用gs_dump导出后,生成的SQL为原始列定义SQL,而非MogDB内置类型的SQL。 + +## 特性约束 + +1. 该功能仅在A模式下生效; +2. 目前不支持Serial/largeserial(PG类型定义)。 + +## 示例 + +```sql +--gsql 执行 +set enable_record_origin_column_define = on; + +create domain long as text; +create domain BINARY_FLOAT as float4; +create domain BINARY_DOUBLE as float8; +set enable_record_origin_column_define = true; +drop table test_col_type; +CREATE TABLE test_col_type( +C_INT INT default 1, +C_REAL real default 1, +C_FLOAT FLOAT default 1, +C_DOUBLE_PRECISION DOUBLE precision default 1, +c_number number default 1, +c_number2 number(3,2) default 1, +C_DECIMAL DECIMAL(5,1) default 1, +C_BINARY_FLOAT BINARY_FLOAT default 1, +C_BINARY_DOUBLE BINARY_DOUBLE default 1, +C_DATE DATE default date'2022-01-10', +C_TIMESTAMP_WITHOUT_TIME_ZONE TIMESTAMP default date'2022-01-10', +C_TIMESTAMP_WITHOUT_TIME_ZONE_2 TIMESTAMP(2) default date'2022-01-10', +C_TIMESTAMP_WITH_TIME_ZONE TIMESTAMP WITH TIME zone default date'2022-01-10', +c_bpCHAR CHAR(2) default 'a', +c_nchar nchar(3) default 'a', +c_varchar2 VARCHAR2(8) default 'a', +v_nvarchar2 nvarchar2(10) default 'a', +c_CLOB clob default 'a', +C_LONG LONG default 'a', +c_BLOB blob default 'a', +c_RAW raw(25) default 'a', +c_date_sysdate date default sysdate, +c_date_current_date date default current_date, +c_date_current_timestamp date default current_timestamp, +c_date_current_timestamp3 date default current_timestamp(3), +c_date_null date default null, +c_number_null number default null, +c_varchar2_null varchar2(10) default null, +c_char "char" default 'a', +c_text text default 'a', +C_BOOL BOOL default false, +C_INT2 INT2 default 1, +C_INT1 INT1 default 1, +C_INT8 INT8 default 1, +C_float4 float4 default 1, +C_float8 float8 default 1, +c_varchar2_2 varchar2 default 'a' +); + +--gs_dump执行 + +gs_dump -D postgres + +``` 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 index e6ff8cea..ec2b1e7a 100644 --- 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 @@ -32,7 +32,7 @@ set enable_ora_trigger_style = on; 目前支持场景: - 支持create or replace语法; -- 支持REFERENCING NEW AS n OLD AS o起别名,支持when中不带:new的形式(即直接new.*),when中有别名只能使用别名,begin ... end之间都可以使用; +- 支持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语法; @@ -41,12 +41,23 @@ set enable_ora_trigger_style = on; - 支持禁止drop procedure触发器的内置函数; - 支持在不同schema下创建多个同名触发器; +  **从MogDB 5.0.12版本开始,新增支持如下场景:** + +- 新增schemaName.triggerName概念,在create、alter、drop时可以指定schema,若不指定则按照当前设置的search_path为准; +- 完善pg_get_triggerdef函数获取触发器关于别名和schema定义信息; +- pg_trigger系统表新增支持查看触发器别名信息和所在schema信息; +- 新增支持该特性下的触发器的备份和恢复; + ## 特性约束 1. 该功能仅在A模式下开启`enable_ora_trigger_style`参数后生效; 2. 开启该参数后在同一schema下仅支持创建一个同名触发器(兼容Oracle); -3. 暂不支持schemaName.triggerName的逻辑,逻辑查找按照当前设置的search_path为准; -4. 暂不支持该特性下创建的触发器的备份恢复功能。 +3. 暂不支持该特性下创建的触发器的备份恢复功能。 + +**从MogDB 5.0.12版本开始,新增如下约束:** +当备份文件中包含兼容A模式风格的触发器(enable_ora_trigger_style=on)时,执行 gs_restore 恢复操作必须满足:​​ +恢复会话用户设置 SET enable_ora_trigger_style = on,​​或​​在目标库的 postgresql.conf 中预先配置该参数。 +​​否则将因触发器语法不兼容导致恢复失败。 ## 示例 @@ -63,8 +74,8 @@ REFERENCING NEW AS ncc FOR EACH ROW when (ncc.col1 = 1) begin - raise info '%', :nCc.col1; - raise info '%', :ncc.col2; +  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 index 956ecc30..20050fd6 100644 --- 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 @@ -13,7 +13,7 @@ date: 2025-03-27 ## 特性简介 -在pg系数据库中,不支持插入非法字符以及C风格字符串结束符'\0'。本特性特实现该功能,增加兼容性;此功能需要在5.0.11版本后通过设置GUC参数`enable_compatible_illegal_chars`开启,方法如下: +在pg系数据库中,不支持字段值数据中包含非法字符(GBK编码下的0xD00x09)以及C风格字符串结束符'\0'。本特性特实现该功能,增加兼容性;此功能需要在5.0.11版本后通过设置GUC参数`enable_compatible_illegal_chars`开启,方法如下: ```sql set enable_compatible_illegal_chars = on; @@ -27,7 +27,7 @@ set enable_compatible_illegal_chars = on; ## 特性描述 -部分客户通过前端工具将逻辑上多个字段值通过0x00值拼接存储在数据库中的一个字段,如果物理拼接字段值过长,还会分别存在两个物理字段中,可能会有完整字符从字节层面被分割为半字符存储在一个字段的最后面,另一个字段的最前面;本特性增对前述场景进行适配。 +部分客户通过前端工具将逻辑上多个不同类型字段值通过0x00值(或者其他指定分隔符)拼接存储在数据库中的一个字段,如果物理拼接字段值过长,还会分别存在两个物理字段中,可能会有完整字符从字节层面被分割为半字符存储在一个字段的最后面,另一个字段的最前面;本特性增对前述场景进行适配。 目前支持场景: @@ -37,12 +37,26 @@ set enable_compatible_illegal_chars = on; - 针对包含非法字符的排序规则; - 针对大多数非法字符的copy、备份恢复功能。 +**MogDB 5.0.12版本新增以下适配:** + +- 适配函数substrb,支持在本特性开关开启的场景下,针对char类型和bytea类型按照字节数截取所需数据,并且在类型为char时,返回的结果不会替换首部和尾部的非法字符为空格; +- 适配postgres_fdw插件支持非法字符操作; + ## 特性约束 1. 该功能仅在A模式下开启`enable_compatible_illegal_chars`参数后生效; -2. 使用like语法和text_pattern_ops仅支持对包含0x00非法字符的查找; -3. 在使用客户端ODBC支持非法字符功能时,需要在obdc.ini文件中增加`ForInvalidCharacters = 1`参数; -4. 在数据迁移时仅支持在源端和目标端字符编码相同的场景; +2. select/update/delete语句在使用like语法和text_pattern_ops仅支持对包含0x00非法字符的查找; +3. 在使用客户端ODBC支持非法字符功能时,需要在obdc.ini文件中增加`ForInvalidCharacters = 1`参数(注意,参数赋值必须为1,不能为true或者on); +4. 数据迁移、copy、查询结果展示时,需保持源端与目标端、客户端与服务端的编码一致。客户端编码可以通过export PGCLIENTENCODING='GBK'设置或者set client_encoding = 'GBK'; + +**从MogDB 5.0.12版本开始,新增如下约束:** + +1. 在数据迁移或者单独copy的场景下,如果某个字段的最开始位置为low-value时,需要开启behavior_compat_options='accept_empty_str'参数(如果包含非法字符low-value的场景,建议常开); +2. 目前仅支持char类型和bytea类型的包含非法字符,且bytea类型在通过sql插入数据时,需要再套一层函数pg_catalog.cast_to_bytea函数,即'aa'::bytea || pg_catalog.cast_to_bytea(pg_catalog.cast_to_varchar2(rawsend('00'))) ||'bb'::bytea; +3. 目前仅postgres_fdw支持非法字符的查询,在odbc端绑定参数查询时,若参数值为单个low-value,同样需要开启behavior_compat_options='accept_empty_str'参数; +4. 调用substrb函数时,当传入参数为字符类型,且按字节指定切割出的字节序列最前面和最后面包含半字符或非法字符,原有逻辑会替换半字符或非法字符为空格,开启enable_compatible_illegal_chars参数后会根据切割结果原样返回; +5. 不支持包含low-value的字段数据做char::bytea、bytea::char的类型转换操作,存在数据截断情况,推荐使用pg_catalog.cast_to_bytea、pg_catalog.cast_to_varchar2来转换; +6. copy迁移数据时,如果包含非法字符,需要将数据组织为CSV格式; ## 示例 diff --git a/product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/support-merge-into-target-tables-as-subqueries.md b/product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/support-merge-into-target-tables-as-subqueries.md new file mode 100644 index 00000000..2ddff9ad --- /dev/null +++ b/product/zh/docs-mogdb/v5.0/characteristic-description/compatibility/support-merge-into-target-tables-as-subqueries.md @@ -0,0 +1,37 @@ +--- +title: 支持merge into的目标表为子查询 +summary: 支持merge into的目标表为子查询 +author: 任建成 齐永江 +date: 2025-06-30 + +--- + +# 支持merge into的目标表为子查询 + +## 可获得性 + +本特性自MogDB 5.0.12版本开始引入。 + +## 特性简介 + +MERGE INTO 语句现在允许使用一个简单子查询的结果作为合并操作的目标表 (TARGET),而不仅限于物理表或视图。 + +## 客户价值 + +增加了对 Oracle语法的兼容性,提供更大易用性,避免创建临时表或视图,直接在 MERGE 语句中动态定义目标数据集。 + +## 特性描述 + +a. 目标子查询可以在没有语义冲突的情况下定义别名 (AS alias_name)。 +b. 目标子查询目前应是简单查询(单表、带过滤/简单计算/DISTINCT,不支持聚合、分组、连接等复杂操作)。 +c. 子查询结果需逻辑可更新。 + +## 示例 + +```sql +MERGE INTO ( +  SELECT ... FROM ... WHERE ... -- 简单子查询定义目标数据 +) AS target_alias +USING ... ON ... +WHEN MATCHED ... WHEN NOT MATCHED ...; +``` diff --git a/product/zh/docs-mogdb/v5.0/characteristic-description/high-performance/ustore-page-consistent-read-PCR.md b/product/zh/docs-mogdb/v5.0/characteristic-description/high-performance/ustore-page-consistent-read-PCR.md new file mode 100644 index 00000000..950b1661 --- /dev/null +++ b/product/zh/docs-mogdb/v5.0/characteristic-description/high-performance/ustore-page-consistent-read-PCR.md @@ -0,0 +1,44 @@ +--- +title: USTORE 存储引擎支持页面一致性读 +summary: USTORE 存储引擎支持页面一致性读 +author: 王子维 吴松 齐永江 +date: 2025-07-07 +--- + +# USTORE 存储引擎支持页面一致性读(Page Consistent Read, PCR) + +## 可获得性 + +本特性自MogDB 5.0.12 版本开始引入 + +## 特性简介 + +相比于MogDB USTORE存储引擎原本的行一致性读(Record Consistent Read, RCR),PCR(Page Consistent Read)特性中,扫描算子会基于快照构造一致性页面,其在扫描数据页面时以事务为单位一次性完成所有相关undo record 的应用,并缓存处理的结果到临时页面中,后续扫描操作在临时页面上完成。相比RCR,PCR避免了其在扫描时可能出现的undo record重复遍历的问题,PCR 在如全表扫描类的查询场景下有较大的性能提升。 + +## 客户价值 + +该特性提高了USTORE引擎的扫描性能,在一些优势场景下(如:更新热点行以及存在长事务场景),其扫描性能可以超过ASTORE引擎。 + +## 新增guc参数 + +`enable_pcr` + +参数说明:是否开启页面一致性读。 + +该参数属于USERSET类型参数。 + +取值范围:布尔型。 + +默认值:on。 + +## 特性约束 + +该功能仅在使用USTORE存储引擎并开启`enable_pcr`参数后生效。 + +## 性能提升 + +开启页面一致性读后,USTORE存储引擎的查询,更新和删除性能均有提升,具体如下: + +- UPDATE场景:开启PCR后,更新性能比优化前提升约8% +- Seq Scan场景:开启PCR后,扫描性能比优化前提升25%-35% +- 更新热点行场景:开启PCR后,USTORE引擎扫描性能较ASTORE引擎提升约30% diff --git a/product/zh/docs-mogdb/v5.0/toc.md b/product/zh/docs-mogdb/v5.0/toc.md index c47402e4..fc6475e5 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.12](/about-mogdb/mogdb-new-feature/5.0.12.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) diff --git a/product/zh/docs-mogdb/v5.0/toc_about.md b/product/zh/docs-mogdb/v5.0/toc_about.md index 0cad8155..035787de 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.12](/about-mogdb/mogdb-new-feature/5.0.12.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) -- Gitee