本文将为您介绍Hologres各版本相关缺陷的修复记录,包括问题描述、影响程度等。您可以通过报错或问题描述,检查您当前的业务中是否产生了相关问题,提前进行问题规避。建议加入实时数仓Hologres交流群联系对应技术支持协助您将产品升级到最新版本,详情请参见 如何获取更多的在线支持?

背景信息

  • 缺陷及修复说明

    • 缺陷内容向下穿透:当前版本存在的缺陷,在之前的版本中均存在。

      例如,1.3版本中存在某缺陷,在1.1或0.10等版本中大多数存在,少数不存在场景有明确标注。

    • 缺陷修复向上包含:当前版本修复后的缺陷,在之后的版本中均已修复。

      例如,1.1版本中已修复的某缺陷,在1.1或1.3等版本中均已修复。

  • 缺陷等级说明

    • P0:建议立即升级,一旦触发会影响线上的使用(如查询正确性、写入成功率等操作)。

    • P1:推荐升级,提前规避相关问题。

    • P2:选择性升级,偶尔发生的问题,具备应该改写方法,或重启即可修复。

2023年12月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P1

通过Fixed Plan将数据写入Hologres的DECIMAL类型列,如果待写入数据为负数,且最小有效小数位与目标字段的小数精度相差19位以上,可能出现数据错误。示例SQL:

CREATE TABLE fixed_plan_decimal (col decimal(38,19));
-- 待写入数据为负数,其最小有效位为个位,与目标字段的小数精度相差19位,触发写入数据错误
INSERT INTO fixed_plan_decimal VALUES (-1.000000000);
-- 写入结果为7922816250.4264337593543950336
SELECT * FROM fixed_plan_decimal;
 

Fixed Plan链路对 DECIMAL 类型精度处理有误,导致数据错误。

出现版本:

2.1.11及以下版本。

修复版本:

2.1.12及以上版本。

说明

修复后,Fixed Plan链路将与非Fixed Plan链路行为一致。

  • 数据写入时,显式指定数据精度,如: -1.000000000::decimal(38,19)

  • 升级到最新版本。

P1

实例开启了Binlog,升级到V2.1.9版本后,CPU使用率显著升高。

对于开启Binlog的实例,升级到V2.1.9版本后,在某些场景上Binlog未能正确抓住错误,导致发生错误后无法正常退出,打印较多日志,引起CPU使用率升高。

出现版本:

2.1.1至2.1.9版本。

修复版本:

2.1.10及以上版本。

升级到最新版本。

2023年11月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P1

使用 var_samp 函数计算方差,输入数据类型为DECIMAL时结果不正确。示例SQL:

CREATE TABLE t1(f1 decimal(38,18));
INSERT INTO t1 VALUES (123),(234),(456);
--decimal类型结果错误
SELECT var_samp(f1) FROM t1;
--返回结果
var_samp   
--------------
 0.2382402695
--转成int类型,结果正确
SELECT var_samp(f1::int) FROM t1;
--返回结果
var_samp     
------------------
 28749.0000000000
 

var_samp 方差计算函数在计算DECIMAL类型时,类型转换错误,导致结果不正确。

出现版本:

2.0.27及以下版本。

修复版本:

2.0.28及以上版本。

升级到最新版本。

2023年10月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P3

使用 date_part 函数时要提取的字段为大写报错: error:unsupport extract type xxx 。示例SQL如下:

select date_part('HOUR',ts) from tt;
--error:unsupport extract type [HOUR]

优化器未能正确识别 date_part 函数中大写字段,导致查询报错。

出现版本:

2.0.1至2.0.25版本。

修复版本:

2.0.26及以上版本。

升级到最新版本。

P3

使用 && 连接Array时查询报错: Unexpected expr type in array expr:145 ,示例SQL如下:

CREATE TABLE test (
  channel_info text
select regexp_split_to_array(LOWER('TMK'),',') && array[(regexp_split_to_array(LOWER(channel_info),'-'))[2]]  from test;
--error:Unexpected expr type in array expr:145

&& 的执行引擎是HQE,当 && 连接Array时,优化器对Array处理有误,导致执行计划错误,从而查询报错。

出现版本:

2.0.25及以下版本。

修复版本:

2.0.26及以上版本。

升级到最新版本。

P3

对于分区表, with 语句选中0个分区时返回的结果中列的别名(alias)错误,示例SQL如下:

create table t0_parent(ds text, v1 bigint, v2 bigint, v3 bigint) partition by list (ds);
create table t0_child1 partition of t0_parent for values in ('20230915');
create table t0_child2 partition of t0_parent for values in ('20230916');
--查询语句,选中了0个分区
with cte1 as (
  select v1, v2, v3 from t0_parent
    cte2 as (
      select v1, v2 from cte1 where v3 = 1 and v3 = 2
    select v2 as vb, v1 as va from cte2 limit 1;
--错误结果,别名错误 
 v2 | v1 
----+----
--正确结果,别名正确
vb | va 
----+----

对于分区表的 with cte 查询,当SQL中选中了0个分区时,优化器QO在生成执行计划时会把0个分区节点给优化掉,导致返回结果不正确,从而列的别名丢失。

出现版本:

2.0.25及以下版本。

修复版本:

2.0.26及以上版本。

升级到最新版本。

P3

case when 语句中有使用DECIMAL类型,且 case when 语句中有走PQE的函数,导致结果报错:

error: column with id 0 has type decimal(38, 10) but ReadColumn returns array Array(type=decimal(20, 4) length=1 null_count=0 [1.0000]).

case when 中有DECIMAL类型时,经过PQE的函数,DECIMAL的精度未被正常转换,导致结果精度无法对齐而报错。

出现版本:

2.0.23及以下版本。

修复版本:

2.0.24及以上版本。

升级到最新版本。

P3

父子表在不同Schema,往子表导入数据时报错: Can't find parent table for table name 。示例SQL如下:

CREATE schema haha;
CREATE TABLE haha.p(
  a text not null, 
  b int not null
) PARTITION BY LIST(a);
CREATE TABLE public.c1 PARTITION OF haha.p FOR VALUES IN('v1');
insert into public.c1 select 'v1', generate_series(0,100);
--error:Can't find parent table for table name

在Hologres中,父表和子表可以允许不在同一个Schema中,当前父子表不在同一个Schema执行INSERT操作时,未正确判断父子表关系,导致报错。

出现版本:

2.0.23及以下版本。

修复版本:

2.0.24及以上版本。

升级到最新版本。

P3

行存表设置Clustering Key和PK不一致,且没有显式设置TTL时,通过 insert on conflict do update 的bulkload离线导入后,查询时出现主键重复。示例SQL如下:

--建表语句
BEGIN ;
CREATE TABLE test (
  id integer,
  phone_number text,
  create_time text
  ,PRIMARY KEY (id)
CALL set_table_property('test', 'orientation', 'row');
CALL set_table_property('test', 'storage_format', 'sst');
CALL set_table_property('test', 'clustering_key', 'create_time:asc');
CALL set_table_property('test', 'distribution_key', 'id');
CALL set_table_property('test', 'time_to_live_in_seconds', '3153600000');
COMMIT ;
--查询时,主键重复
select * from test;
id | phone_number |create_time
---|--------------|-----------
1  | 134xxxx      | 2023-11-06 19:25:42.483287+08
1  | 134xxxx      | 2023-11-06 19:25:42.483287+08

行存表 insert on conflict do update 的原理是标记delete+insert,当行存表的PK和Clustering Key不一致时,标记的detele文件未被正确Compaction,从而导致主键重复。

出现版本:

2.0.22及以下版本。

修复版本:

2.0.23及以上版本。

  • 将行存表的PK和Clustering Key改为一致,或者设置表为列存表。

  • 升级到最新版本。

P2

多个 count distinct 对执行 array_to_string(array_sort xxx)) 后的列 group by 报错: ORCA failed to produce a plan : No plan has been computed for required properties 。示例SQL如下:

create table t1 (f1 int , f2 int , f3 int , f4 text[]);
select 
f1,f5,
count(distinct f2),
count(distinct f3)
  select f1,f2,f3,array_to_string(array_sort(f4),',')as f5 from t1
group by f1,f5;

count distinct 会产生CTE, array_sort 函数不支持CTE inline,导致执行计划推导错误,从而SQL报错。

出现版本:

2.0.22及以下版本。

修复版本:

2.0.23及以上版本。

升级到最新版本。

P2

执行 drop server 之后,部分查询卡住。

执行 drop server 后,FE节点间未能正常Replay,导致节点间版本不一致,从而查询卡住。

出现版本:

1.3.40至1.3.51版本。

修复版本:

1.3.52及以上版本。

升级到最新版本。

2023年9月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

使用Proxima向量索引,当插入null向量并且不走Fixed Plan时,写入就会报错: internal error: check condition "and_handle_null" assert failed ,示例SQL如下:

BEGIN;
CREATE TABLE t (
  vector float4[] CHECK (array_ndims(vector) = 1 AND array_length(vector, 1) = 3)
CALL SET_TABLE_PROPERTY ('t', 'proxima_vectors', '{"vector":{"algorithm":"Graph","distance_method":"SquaredEuclidean"}}');
set hg_experimental_enable_fixed_dispatcher = off;
-- 插入一个null向量
INSERT INTO t values (null);
-- ERROR:  internal error: check condition "and_handle_null" assert failed.

非Fixed Plan模式下,写入null的向量值,导致 CHECK (array_ndims(vector) 时系统不匹配,从而报错。

出现版本:

2.0.21及以下版本。

修复版本:

2.0.22及以上版本。

升级到最新版本。

P2

具有 not null 属性的字段使用 string_agg 处理时报错: Column column0 should be non-nullable but the values contain 1 nulls ,示例SQL如下:

create table test(id int not null, msg text not null);    
insert into test values (1, 'b');
select count(distinct id), string_agg(distinct id::text) from test where msg = 'a';

string_agg 的输出可以是 null ,但优化器QO会根据他处理的字段属性进行推导结果是否为 null 。当字段为 not null 时,QO会推导 string_agg 的结果不能为null,导致结果错误,从而出现报错。

出现版本:

2.0.20及以下版本。

修复版本:

2.0.21及以上版本。

升级到最新版本。

P2

当实例的Table Group和Shard Count较多时(Shard Count大于100),Shard Count因Worker挂掉等原因分配不均,使用 Rebalance 命令后仍然不均匀。

当实例的Table Group和Shard Count较多时(Shard Count大于100),Rebalance命令在重新分配Shard时不准确,导致仍然不均匀。

出现版本:

2.0.20及以下版本。

修复版本:

2.0.21及以上版本。

升级到最新版本。

P2

表字段有4字节长度的UTF-8数据,使用 substring 处理时结果错误(from 表),单独使用 substring 处理4字节长度的UTF-8数据,结果正确。示例SQL如下:

-- 返回结果为3,正确
select length(substring (E'\U0001F345' || '23456789', 1, 3));
-- substring from 表时,结果错误
create table t (emoji text);
insert into t values (E'\U0001F345' || '23456789');
-- 返回结果为1,结果错误,实际应该为3
select length(substring(emoji, 1, 3)) from t;

目前实现中, substring 只支持了3字节长度的UTF-8数据,导致从表数据使用 substring 时结果出错。

出现版本:

2.0.19及以下版本。

修复版本:

2.0.20及以上版本。

升级到最新版本。

P2

开启Binlog消费后,CPU消耗显著增加。

由于系统默认参数设置不合理,在消费Binlog时,产生了高频的系统日志,造成CPU消耗增加。

出现版本:

2.0.17、2.0.18、2.0.19。

修复版本:

2.0.20及以上版本。

升级到最新版本。

P2

string_agg array_agg 在有agg filter的情况下结果错误,示例SQL如下:

  • DDL和导入数据:

    create table test(x text, y int);
    insert into test values(null, 1), (null, 2),(null, 1), (null, 2);
  • 查询1:

    select array_agg(x) filter (where x is not null) from test group by y;sql
    --预期返回结果
    [null]
    [null]
    --实际返回结果,结果错误
    {null}
    {null}
  • 查询2:

    select array_agg(x) filter (where x is  null) from test group by y;
    --预期返回
    {null,null}
    {null,null}
    --实际返回,结果错误
    {null,null}
    {null}

string_agg array_agg 在有agg filter的情况下,未能正确处理filter,导致结果错误或者filter结果不稳定。

出现版本:

2.0.18及以下版本。

修复版本:

2.0.19及以上版本。

升级到最新版本。

P2

具有 not null 属性的字段使用 array_agg filter 出来的结果有 null 时,导致实例出现短暂重启,示例SQL如下:

create table bbb(x int not null, y int);
insert into bbb values (1, 1);
select array_agg(x) filter (where x > 1) from bbb group by y;

使用 array_agg filter 时,如果这个字段本身是 not null ,那么QE会将结果推导成 not null ,而实际结果中有 null ,导致与推导结果冲突,实例出现coredump。

出现版本:

2.0.18及以下版本。

修复版本:

2.0.19及以上版本。

升级到最新版本。

P1

使用Proxima时,将 min_flush_proxima_row_count 参数设置为 0 导致实例重启。

对于Hologres存储引擎SE, min_flush_proxima_row_count 参数值必须大于0,当把 min_flush_proxima_row_count 设置为0时,SE检验不通过,导致实例重启。

出现版本:

2.0.18及以下版本。

修复版本:

2.0.19及以上版本。

升级到最新版本。

P2

开启自动创建分区后,将表移动至另一个Schema,并在原Schema下新建同名表时报错: ERROR: auto_partitioning.time_unit could only be specified once ,示例SQL如下:

--开启自动分区
begin;
CREATE TABLE ads.test (
  olap_date integer NOT NULL default 0,
  pk text NOT NULL default ''::text,
  sid text
  ,PRIMARY KEY (olap_date, pk)
  PARTITION BY LIST (olap_date);
CALL set_table_property('ads.test', 'auto_partitioning.enable', 'true');
CALL set_table_property('ads.test', 'auto_partitioning.time_unit', 'day');
CALL set_table_property('ads.test', 'auto_partitioning.time_zone', 'PRC');
CALL set_table_property('ads.test', 'auto_partitioning.num_precreate', '4');
CALL set_table_property('ads.test', 'auto_partitioning.num_retention', '33');
CALL set_table_property('ads.test', 'auto_partitioning.num_hot', '15');
commit;
--切换表的schema
alter table test set schema to public;
--重新创建同名表
begin;
CREATE TABLE ads.test (
  olap_date integer NOT NULL default 0,
  pk text NOT NULL default ''::text,
  sid text
  ,PRIMARY KEY (olap_date, pk)
  PARTITION BY LIST (olap_date);
CALL set_table_property('ads.test', 'auto_partitioning.enable', 'true');
CALL set_table_property('ads.test', 'auto_partitioning.time_unit', 'day');
CALL set_table_property('ads.test', 'auto_partitioning.time_zone', 'PRC');
CALL set_table_property('ads.test', 'auto_partitioning.num_precreate', '4');
CALL set_table_property('ads.test', 'auto_partitioning.num_retention', '33');
CALL set_table_property('ads.test', 'auto_partitioning.num_hot', '15');
commit;
ERROR: auto_partitioning.time_unit could only be specified once

开启自动创建分区后,对原表切换Schema,自动分区的配置未能一起切换,导致在原Schema下创建同名表时,自动分区配置冲突,从而出现报错。

出现版本:

2.0.18及以下版本。

修复版本:

2.0.19及以上版本。

升级到最新版本。

2023年8月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

使用Concat函数入参为单列时报错: Function concat node must have at least 2 arguments but it only has 1 。示例如下:

create table aaa(x text);
insert into aaa values ('11111111');
select concat(x) from aaa;
HGERR_msge internal error: Function concat node must have at least 2 arguments but it only has 1

低版本不支持Concat函数入参为单列,导致报错。

出现版本:

2.0.17及以下版本。

修复版本:

2.0.18及以上版本。

建议升级到最新版本。

P1

分区表开启冷存后,对分区父表执行 alter schema 操作,例如 add cloumn ,导致分区子表转化为冷存动作不符合预期,具体可能有如下几种:

  • 部分分区子表转为冷存的状态持续为 transferring

  • 预期应该转化为冷存的子表,未正常转换,例如设置10天前子表为冷存,但是存在10天前子表是热存。

  • 已经为冷存的子表,查看存储时仍然按照热存的形式存储。

对于分区表设置冷存的场景,如果父表执行 alter schema 操作,会同时对子表生效,导致分区子表的存储属性在FE节点与元数据管理器SM不一致(子表在FE上存储为冷存,SM为其他模式),从而导致子表的冷存动作不符合预期。可以通过如下SQL获取不符合预期的冷存表:

select db_name, schema_name, table_name 
from hologres.hg_table_info 
where collect_time::date = date '20230901' and table_meta::json#>>'{table_storage_mode}' = 'cold' and hot_storage_size > 0 order by table_name;

出现版本:

2.0.17及以下版本。

修复版本:

2.0.18及以上版本。

  • 在一个事务内修改已经转换为冷存子表的存储属性,示例如下:

    begin;
    call set_table_property('schema.<冷存子表名>', 'storage_mode', 'hot');
    call set_table_property('schema.<冷存子表名>', 'storage_mode', 'cold');
    commit;
  • 建议升级到最新版本。

    说明

    升级后,对于升级前的存储冷存子表还需要再做一次存储属性订正。

P2

只读从实例无法消费Hologres Binlog。

只读从实例某项默认属性变更导致。

出现版本:

1.3和2.0早期版本。

修复版本:

1.3.61、2.0.17及以上版本。

建议使用主实例消费Hologres Binlog,或升级到最新版本。

P2

某列和不同类型列做比较且用 or 连接时,如: col::type = const1::type1 or col::type = const2::type2 ,导致结果为空或者不符合预期。示例SQL如下:

create table t (a date, b timestamp, c text, d int);
--a是date类型,or后转成了timestamp类型,导致结果不符合预期
select * from t where a in (timestamp '2023-06-12', timestamp '2023-06-13') or a = timestamp '2023-06-14';
--or连接的字段类型不一致
select * from t where a in (timestamp '2023-06-12', timestamp '2023-06-13') or a = '2023-06-14';

or 连接的字段类型不一致时,优化器QO在生成执行计划时,没有将类型对齐,导致最终输出结果与预期有差异。

出现版本:

1.3.59及以下版本和

2.0.14及以下版本。

修复版本:

1.3.60及以上版本和2.0.15及以上版本。

建议升级到最新版本。

P2

主从实例,执行 HG_MOVE_TABLE_TO_TABLE_GROUP 或者设置表为 readonly ,有一定概率会触发从实例不可用。

由于从实例启动了Lazy Open机制,在主实例执行Resharding或者手动设置 readonly true 后,并再次写入数据后,主从实例Shard状态存在不一致,造成从实例不可用。

出现版本:

1.3.42至2.0.16版本。

修复版本:

暂无。

  • 如果需要执行Resharding或者设置表只读,可以首先在从实例执行以下命令,提前关闭Lazy Open机制。

    select hg_admin_command('set_global_flag', 'enable_dynamic_close_tablet=false');    
    select hg_admin_command('set_global_flag', 'enable_lazy_open_tablet=false');

    。并需要设置完重启一次实例,新配置会引起内存水位有一定程度上升。

2023年7月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

共享集群读取ODPS加密数据报错:

error query next from foreign table executor failed ,pangu://xxxx validate userinfao fail xxxx

共享集群不支持加密数据。

出现版本:

2.0.15及以下版本。

修复版本:

2.0.16及以上版本。

建议升级到最新版本。

P2

使用备份恢复功能,原实例中有冷存表,且冷存表有频繁写入,备份失败。

冷存表有频繁写入时,数据会一直执行compaction,备份恢复使用的是不停机备份,compaction一直无法完成,导致shard之间的version一直无法对齐,备份获取不到shard最新状态,从而失败。

出现版本:

2.0.15及以下版本。

修复版本:

2.0.16及以上版本。

  • 将有频繁写入的冷存表转换为热存表再进行备份,转热存操作请参见 数据分层存储

  • 建议升级到最新版本。

P1

查询PQE的SQL手动cancel/系统超时cancel后,实例出现短暂重启。

PQE的SQL比较耗费资源,当SQL被系统超时cancel/手动cancel,没有被正常cancel,导致出现空指针,实例coredump。

出现版本:

2.0.12至2.0.14版本。

修复版本:

2.0.15及以上版本。

建议升级到最新版本。

P2

case when 查询中有 array[] 类型,查询报错:

Filter has x rows but length of columns is y

case when 处理 array[] 类型的字段时,会丢失 array[] 内的一些数据,导致查询报错。

出现版本:

2.0.10及以下版本。

修复版本:

2.0.11及以上版本。

建议升级到最新版本。

P1

对开启Binlog的表执行 DROP 操作后,实例有重启过,重启后实例存储并没有下降,监控的存储比 pg_database_size 查询结果多。

开启Binlog的表 DROP 后,实例重启导致表Binlog的目录没有被正常删除,从而导致存储未下降。

出现版本:

2.0.12及以下版本。

修复版本:

2.0.13及以上版本。

建议升级到最新版本。

P2

建表时指定distribution key为asc/desc顺序,导致查询报错/实例短暂重启。示例如下:

BEGIN ;
CREATE TABLE test(a int);
CALL set_table_property('test', 'distribution_key', 'a:asc');
COMMIT ;

distribution key不支持指定asc/desc顺序,导致FE执行DDL时replay失败,从而出现coredump或者查询/写入对应表报错。

出现版本:

1.3.55及以下版本。

修复版本:

1.3.56及以上版本。

  • 创建distribution key时不指定asc/desc顺序。

  • 升级到最新版本解决coredump问题,建表时指定distribution key的asc/desc将会报错 invalid distribution column: xx:asc

2023年6月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

SLPM模式下,通过 slpm_alter_view_owner 函数开启在不同的Schema下建两个同名View,报错: ERROR: more than one row returned by a subquery used as an expression 。示例SQL如下:

call slpm_enable();
call slpm_enable_multi_schema_view();
create schema test_schema;
create table tb1(id int);
create view public.v1 as select * from public.tb1;
create view test_schema.v1 as select * from public.tb1;

SLPM模式下,跨Schema创建视图会引用 pg_class 系统表,当不同Schema下有同名View时, pg_class 里有 relname 列重复,子查询查出来不止一行,从而导致结果错误。

出现版本:

2.0.3至2.0.9版本。

修复版本:

2.0.10及以上版本。

建议升级到最新版本。

P1

开启冷存后,只读从实例访问冷存表,实例出现短暂重启。

当前版本只读从实例配置缺少冷存相关的环境变量,因此当只读从实例访问冷存表时报错。

出现版本:

1.3.54及以下版本。

修复版本:

1.3.55及以上版本。

  • 将冷存表转成标准存储表。

  • 建议升级到最新版本。

P2

Hologres实例升级 V1.3版本后在MaxCompute中创建Hologres外部表,通过双签名方式访问华东2(上海)和美国(弗吉尼亚)地域的Hologres实例时查询报错:

ERROR: pooler: xxxx: authentication failed

华东2(上海)和美国(弗吉尼亚)地域升级后因环境配置错误,导致缺少MaxCompute访问Hologres的双签名账号鉴权,导致MaxCompute查Hologres时出现鉴权错误。

出现版本:

1.3.54及以下版本。

修复版本:

1.3.55及以上版本。

建议升级到最新版本。

P1

Hologres实例升级 V1.3版本后华东2(上海)和美国(弗吉尼亚)地域通过如下命令查看到单节点连接数上限不是128。

show max_connections;

华东2(上海)和美国(弗吉尼亚)地域升级后因环境配置错误,导致单节点最大连接数实际值与默认值128不同。

出现版本:

1.3.54及以下版本。

修复版本:

1.3.55及以上版本。

建议升级到最新版本。

P2

开启数据脱敏后,查询SQL使用CTE+union脱敏字段,导致查询报错:

ERROR: pooler: xxxx: remote server read/write error yy 。示例如下:

set hg_anon_enable = on;
create table if not exists test_anon_cte(id text);
security label for hg_anon on column test_anon_cte.id is 'hash';
with tt2 as (select * from test_anon_cte) select count(1) from tt2 where id != 'a' group by id union all select count(1) from tt2 where id != 'b' group by id;

开启数据脱敏后,脱敏字段不支持union all,在CTE+union的情况下,最外层查询出现空指针,导致实例出现coredump,从而查询报错。

出现版本:

1.3.51及以下版本。

修复版本:

1.3.52及以上版本。

建议升级到最新版本解决实例coredump,但脱敏字段不支持union,查询会报错 UNION is not support on security item

P2

Hologres从V1.1版本升级至V1.3版本后, cast arrary to text 的结果中,会出现转义符号( \ ),示例如下:

create table arrary_to_text (
  a text, b text, c text
insert into arrary_to_text values ('7416461', 'czzzzz', '2023-04-16 23:13:34');
select CAST(ARRAY_AGG(CONCAT('[','"', a,'"',',','"', b,'"',',','"', c,'"',']')) AS TEXT) AS list_vin from arrary_to_text limit 1;
--1.3最新版本的返回结果
"{"[\"7416461\",\"czzzzz\",\"2023-04-16 23:13:34\"]"}"
--1.1版本返回结果
"{"["7416461","czzzzz","2023-04-16 23:13:34"]"}"

Hologres V1.3.51以下的版本对 cast array to text 的转换支持不完善,未添加转义符号( \ )。从V1.3.51版本开始,Hologres完善了 cast array to text 的支持,将行为保持与PostgreSQL标准协议一致,查询结果相比老版本结果中将会有转义符号( \ ),因此结果不一致是符合预期的。

出现版本:

1.3.50及以下版本。

修复版本:

1.3.51及以上版本。

结果多了转义符号( \ )是符合预期的。

2023年5月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

执行包含Nested Loop Join的SQL报错: Schema has 1 fields but 2 are expected 。示例SQL如下:

select "_"."table_name"
    from "public"."test" "_"
    where "_"."table_name" = 'hello' 
    and (case when lower("_"."user_id") is not null
        then lower("_"."user_id")
        else ''
        end) = 'ssss';

Hologres的Nested Loop Join输出列包含Outer和Inner,需要额外的project来指定输出的列,当前版本的Hologres优化器会将多余的project优化掉,导致表的列对不齐,从而查询报错。

出现版本:

1.3.45及以下版本。

修复版本:

1.3.49及以上版本。

建议升级到最新版本。

P2

TEXT类型数据转换成JSON类型时,如果TEXT类型的数据不符合标准JSON格式,也会被转成JSON类型。示例SQL如下:

create table test1(data text);
insert into test1 values('{"a","b"}');
select data::json from test1;
--错误的结果:
{"a","b"}

正确的结果应该是报错: invalid input syntax for type json" detail: "Expected \":\", but found \",\"."

执行 text::json 类型转换时,时, ::json 被处理成了cast , 导致执行引擎QE触发JSON数据格式校验,导致数据被错误的转换成了JSON类型数据。

出现版本:

1.3.20至1.3.46版本。

修复版本:

1.3.47及以上版本。

建议升级到最新版本。

P2

使用 to_number 函数(返回类型是DECIMAL),再将结果转换成STRING类型,后续的计算结果错误。示例SQL如下:

create table test(x text);
insert into test values ('0');
select (to_number(x, '9') || ' days')::interval from test;
-------
0.E-10 days

在Hologres中, to_number 会将 0.0000000000 转换成TEXT类型,然后变成科学计数法,计算引擎QE对于科学计数法目前处理不当,导致查询结果不正确。

出现版本:

1.3.44及以下版本。

修复版本:

1.3.46及以上版本。

建议升级到最新版本。

P2

读取MaxCompute Cluster、Cfile等特殊类型的表时,相比读取普通MaxCompute表,查询变慢。

当前版本读取MaxCompute Cluster 、Cfile时,Hologres的计算引擎会将读取的外表小文件拆分成更小的文件,导致单次查询的文件变多,因此查询变慢。

出现版本:

1.3.20至1.3.40版本。

修复版本:

1.3.45及以上版本。

建议升级到最新版本。

2023年4月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P0

修改表Schema时(如修改TTL、Bitmap、Dictionary等),实例出现重启。如修改表的TTL的SQL示例如下:

call set_table_property('tablename', 'time_to_live_in_seconds', '946080');

实例从V1.1等低版本升级上来,导致系统中存在部分表历史版本Schema元数据有缺失,这部分缺失信息在对应表完成Flush或Compaction操作之后可能需要被访问,当前版本对Schema缺失信息处理不当,触发实例coredump。

出现版本:

1.3.20至1.3.44版本。

修复版本:

1.3.45及以上版本。

建议升级到最新版本。

P2

使用早于1970年1月1日的timestamptz数据时,函数 to_char(to_timestamp(hour)) 的返回结果会比实际时间少1小时,示例SQL如下:

create table t (a int);
insert into t values (2);
select to_char(to_timestamp(a || '', 'HH24'), 'HH24:00:00') from t;

执行结果是: 01:00:00 ,实际结果应该是 02:00:00

执行引擎在时间戳处理过程中,时间精度转化错误,导致结果错误。

出现版本:

1.3.20至1.3.43版本。

修复版本:

1.3.44及以上版本。

建议升级到最新版本。

P2

SQL中带有JSONB类型转NUMERIC类型,且NUMERIC没有指定精度,查询报错: HGERR_msge numeric field overflow HGERR_detl A field with precision 0, scale 0 must round to an absolute value less than 1. HGERR_ctxt func_name:jsonb_numeric HGERR_end 。示例SQL如下:

create table t1(f1 jsonb);
insert into t1 values('1.1');
select f1::numeic from t1;

JSONB类型转NUMERIC类型未指定精度,优化器QO生成的执行计划没有给出默认精度,QE在执行的时候将NUMERIC转换为DECIMAL的时候对于没有指定精度的情况,默认值是 0,0 。因此无法运行导致报错。

出现版本:

1.3.20至1.3.41版本。

修复版本:

1.3.42及以上版本。

  • JSONB类型转NUMERIC类型时指定精度。

  • 建议升级到最新版本。

P2

查询OSS数据湖数据时,报错: query next from foreign table executor failed, Failed to call iterateForeignScan: ArrayIndexOutOfBoundsException

读取OSS数据时,Hologres数据湖查询引擎出现内存泄露,导致查询报错。

出现版本:

1.3.20至1.3.41版本。

修复版本:

1.3.42及以上版本。

建议升级到最新版本。

2023年3月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

union all 两个Deciaml字段时,如果Decimal字段的精度不一致,查询报错: NUMERIC precision 65535 must be between 1 and 1000 。示例SQL如下:

create table t1(a int ,b numeric(38,0), c bigint);
create table t2(a int ,b numeric(38,0), c numeric(30,0));
select b / power(10, 18),c from t1
UNION all
select a / power(10, a), c from t2

union all 两边的Deciaml精度不一致时,QO未做精度对齐,导致执行时QE发现精度不一致,从而查询报错。

出现版本:

1.3.20至1.3.40版本。

修复版本:

1.3.41及以上版本。

建议升级到最新版本。

P2

在同一个事务内,对已经存在的分区父表执行 call set_table_property 命令报错: SET_TABLE_PROPERTY and CREATE TABLE statement are not in the same transaction for table 。示例SQL如下:

--示例分区父表存在的情况下,执行如下sql:
BEGIN;
CREATE TABLE IF NOT EXISTS "public".test ( "parent_node_id" text, "parent_node_name" text, "is_leaf" text, "node_flag" text, "ds" text) PARTITION BY LIST(ds);
CALL SET_TABLE_PROPERTY('"public".test', 'orientation', 'row');
COMMIT;

在Hologres V1.3.38之前的版本,当分区父表存在时,使用 set_table_property 命令设置的属性与原表相同时,SQL会被自动忽略。在Hologres V1.3.38版本加强了对 set_table_property 设置属性的校验,原则上不允许对已经存在的表修改部分属性,比如orientation、distribution_key、clustering_key等属性,如果修改则会报错。

出现版本:

1.3.38至1.3.40版本。

修复版本:

1.3.41及以上版本。

建议升级到最新版本。

说明

升级后将会保持与V1.3.38之前的版本行为一致,即如果表存在,修改表属性时如果属性相同则忽略掉SQL。

P2

to_date to_char to_timestamp 函数在处理有前缀空格的数据时查询报错: HGERR_detl Field requires 4 characters, but only 0 could be parsed 。示例SQL如下:

CREATE TABLE test2 (x text);
INSERT INTO test2 VALUES (' 2022 03');
SELECT to_date(x, 'YYYYMM')FROM test2;

当数据有前缀空格时, to_date to_char to_timestamp 函数对空格处理有误,导致数据转换失败,从而查询报错。

出现版本:

1.3.20至1.3.40版本。

修复版本:

1.3.42及以上版本。

  • 修改SQL处理前缀空格,示例: to_char(year, 'FM9999')

  • 建议升级到最新版本。

2023年2月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

rb_build 函数带表名时报错: Not support calling pg udf for type (23, LIST) ,示例SQL如下:

create table rb_build_test(a int[]);
insert into rb_build_test values ('{1,2,3}');
select rb_build(a) from rb_build_test
--报错信息
HGERR_code XX000 HGERR_msge internal error: Not support calling pg udf for type (23, LIST)

直接执行 rb_build 函数不带表名则运行成功,示例SQL如下:

select rb_build('{1,2,3}')
--返回结果
rb_build
\x3a300000010000000000020010000000010002000300
                                

执行 rb_build 函数带有表名时,会先计算然后落表,该函数执行是在HQE中,而当前版本HQE暂时不支持数组和PQE数组的双向转换,所以执行失败。

出现版本:

1.3.37及以下版本。

修复版本:

1.3.38及以上版本。

建议升级到最新版本。

P2

SQL中包含 limit x offset y 语句,其中 y>x ,运行SQL后返回结果数错误。示例SQL如下,本应该返回2行结果,实际返回0行。

create table test (id int, msg text);
insert into test values (1, 'a'), (2, 'b'), (3, 'c'), (4, 'd');
select * from (select * from test order by id limit 2) x limit 4 offset 3;

在生成执行计划时,当 offset 值超过 limit 值的时候,仍然将 limit 下推给了算子,但 offset 没有下推,导致查询结果不正确。

出现版本:

1.3.20至1.3.36版本。

修复版本:

1.3.37及以上版本。

  • 修改SQL,将SQL中 offset 的值改为小于 limit 的值。

  • 建议升级到最新版本。

P2

执行ANALYZE操作时报错: ERROR: store statistic results for table `public.table_name` failed: basic_string::_M_create

ANALYZE在解析表的字段时未处理正确,导致报错。

出现版本:

1.3.36版本。

修复版本:

1.3.37及以上版本。

建议升级到最新版本。

P2

指定schema(非public schema)时执行 create table as 命令,报错找不到表,示例SQL如下:

create schema test_schema;
set search_path to test_schema;
create table test_src (a int);
insert into test_src values (1);
create table as test_src_1 select * from test_src
--报错信息
error:relation "xxx" does not exsits;

使用 set search_path to 命令指定特定Schema后, create table as 语法中表名称未添加Schema前缀的情况下,系统还是会默认从 public Schema下搜索源表、插入数据,但 public Schema下没有此表,导致报错。

出现版本:

1.3.20至1.3.36版本。

修复版本:

1.3.37及以上版本。

  • create table as 语法中为表指定schema,示例:

    create table as test_schema.test_src_1 select * from test_src;
  • 建议升级到新版本。

P2

设置bigserial类型字段的起始值超过int4范围(-2147483648 ~ 2147483647),查询表数据时起始值不正确,示例SQL如下:

create table if not exists test_tb(
  id bigserial not null,
  f1 text,
  primary key (id,f1)
--在insert语句中,给f1字段插入数据。
insert into test_tb(f1) values('1'),('2'),('3');
-- 修改自增起始值100000000000
alter sequence public.test_tb_id_seq restart with 100000000000
-- 插入两条数据测试
insert into test_tb(f1) values('6'),('7');
select * from test_tb order by id asc;
--返回结果
id| f1
------------+----
1 | 1
2 | 2
3 | 3
1128270048 | 6
1128270049 | 7

当前版本对bigserial类型起始值支持的数据范围是int4的范围(-2147483648 ~ 2147483647,当设置的起始值超过支持的范围后,会出现精度溢出,从而导致结果不正确。

出现版本:

1.3.20至1.3.35版本。

修复版本:

1.3.36及以上版本。

建议升级到新版本。

P2

Hologres实例从V1.1版本升级到V1.3版本后,查询、写入分区表Array类型时报错: internal error: Datasets has different schema Schema ,且SQL命中的分区有升级前的分区和升级后创建的分区。

分区表父表的Array类型的字段未指定 not null 属性,当前版本处理Array的 nullable 属性处理有误,升级前默认为 nullable ,升级后新创建子表默认为 not null ,当查询同时命中升级前后多个分区时,由于分区子表元数据不一致,导致执行报错。

出现版本:

1.3.20至1.3.35版本。

修复版本:

1.3.36及以上版本。

  • 对分区父表执行一次修改表属性操作,示例:

    call set_table_property('table_name', 'time_to_live_in_seconds', 'xx');
  • 建议升级到新版本。

2023年1月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

分区表场景下,开启JSONB列存,查询分区父表时速度慢,但查询子表速度很快。示例SQL如下:

CREATE TABLE public.hologres_parent(a text, b jsonb) PARTITION BY LIST(a);
CREATE TABLE public.hologres_child1 PARTITION OF public.hologres_parent FOR VALUES IN('v1');
select b->>'xxx' from hologres_parent;

开启JSONB列存后,查询分区父表,优化器无法将查询下推到分区子表,导致查询出整列JSONB,从而性能变差。

出现版本:

1.3.20至1.3.34版本。

修复版本:

1.3.35及以上版本。

  • 直接查询分区子表。

  • 建议升级到最新版本。

P2

使用JSONB列存时,带 LIMIT 过滤,列存不生效,查询速度慢。

create table jsonb_test(inputvalues JSONB );
select inputvalues ->> 'price' pos_id from jsonb_test where inputvalues ->> 'price' = 'aaa' limit 100;

在有 LIMIT 的情况下,执行计划中列存下推失败,导致计算时会查询出整列JSONB,从而出现性能退化。

出现版本:

1.3.20至1.3.34版本。

修复版本:

1.3.35及以上版本。

  • 开启JSONB列存后不加 LIMIT

  • 建议升级到最新版本。

P0

在开启MC外表直读场景下,实例因为某些原因重启(如扩容计算节点、OOM等)造成实例服务无法启动。

MC直读时在因为系统实现缺陷,存在一定概率造成元数据与数据状态不一致,造成存储引擎无法正常加载数据,造成启动失败。后续修正问题时,有可能存在丢失删除状态的问题。

出现版本:

1.3.14至1.3.33版本。

修复版本:

1.3.34及以上版本。

  • 建议低版本不要开启MC直读功能。

  • 建议升级到新版本。

P2

查列存表Binlog,且设置了Segment Key, WHERE 过滤条件为Segment Key,查询时,过滤条件无效。示例SQL如下:

BEGIN;
CREATE TABLE test (
  id int PRIMARY KEY,
  title text NOT NULL,
  c_time timestamptz
CALL set_table_property ('test', 'orientation', 'column');
call set_table_property('test', 'event_time_column', 'c_time');
call set_table_property('test', 'binlog.level', 'replica');
call set_table_property('test', 'binlog.ttl', '86400');
COMMIT;
select hg_binlog_lsn,hg_binlog_event_type,hg_binlog_timestamp_us,* from test where c_time = 1;

示例中,查询结果中 c_time 不等于1,为其他值。

列存表设置了Binlog和Segment Key,在 WHERE 条件中使用Segment Key过滤,生成了错误的执行计划,导致过滤无效。

出现版本:

1.3.33及以下版本。

修复版本:

1.3.34及以上版本。

建议升级到新版本。

P2

使用 #> 操作符解析JSONB时报错: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. 示例建表SQL如下:

create table t1 (f1 json);
insert into t1 values ('{"a":"Hello\u00F7"}');
select f1 #> ARRAY['a'] from t1;

#> 操作符实际上是通过 json_extract_path 函数去解析,解析JSONB类型时,默认使用Postgres的ASSII码,导致报错。

出现版本:

1.3.33及以下版本。

修复版本:

1.3.34及以上版本。

建议升级到新版本。

2022年12月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

创建一个新的数据库,权限模型设置为SPM后,第一次使用JDBC消费Hologres Binlog出现报错: ERROR: internal error: create table hologres.hg_replication_progress failed

在JDBC消费Hologres Binlog时为了让所有用户看到 hg_replication_progress ,系统会发出 GRANT select ON TABLE hologres.hg_replication_progress TO PUBLIC; 的授权命令,但是SPM禁用GRANT命令,导致创建失败,从而消费Binlog报错。

出现版本:

1.3.20至1.3.32版本。

修复版本:

1.3.33及以上版本。

  • 先切换至专家权限模型授权再使用SPM模型消费Binlog或者直接使用专家权限模型消费Binlog。

  • 建议升级到新版本。

P1

Hologres实例升级到V1.3.30版本后,内存使用率不明原因上涨,业务QPS、数据量等均没有变化。

在Hologres中默认会有Result Cache,在Result Cache插入失败时资源没有及时析构,从而出现内存使用率上涨。

出现版本:

1.3.30至1.3.31版本。

修复版本:

1.3.32及以上版本。

建议升级到新版本。

P2

jsonb_object_filed 嵌套 jsonb_array_element 时报错: internal error: Only jsonb_object_feld and jsonb_object_field_text supported ,示例SQL如下。

create table t1(f1 jsonb);
insert into t1 values ('[{"a":1},{"b":2}]');
select  f1->0->'a' from t1;

函数嵌套逻辑错误,导致值不匹配。

出现版本:

1.3.20至1.3.29版本。

修复版本:

1.3.30及以上版本。

建议升级到新版本。

P2

查询只读从实例中的表时出现主键重复,查询主实例中相同的表则没有主键重复。

数据刚导入时就执行删除,且只读从实例刚好因为升级、扩容等原因Failover,导致从实例中重复的主键数据没有及时清理掉,从而出现从实例主键数据重复。

出现版本:

1.3.27至1.3.28版本。

修复版本:

1.3.29及以上版本。

  • 使用主实例提供查询。

  • 建议升级到新版本。

2022年11月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

建表时,nullable的字段设置为Clustering Key或Segment Key ,查询数据时有偶发结果不一致的现象。

含有nullable Clustering Key或Segment Key的表,查询的时候,Result Cache中的结果缓存错误,导致查询结果不一致。

出现版本:

1.1.30至1.3.27版本。

修复版本:

1.3.28及以上版本。

  • 重新建表并指定设置Clustering Key或Segment Key的字段不能为空。

  • 建议升级到新版本。

P2

使用 ST_Collect(col) 函数时报错: ERPC_CONNECTION _COLSED

PostGIS函数兼容PostgreSQL,Hologres中使用原生PostgreSQL的 node tag 值进行判断,判断错误导致报错。

出现版本:

1.3.27及以下版本。

修复版本:

1.3.28及以上版本。

建议升级到新版本。

P2

使用 string_agg(text) 函数出现报错: An I/O error occurred while sending to the backend

string_agg 函数在Hologres中是走PQE,当 string_agg(text) 没有指定分隔符时,PQE处理该函数出现空指针,导致查询报错。

出现版本:

1.3.20至1.3.27版本。

修复版本:

1.3.28及以上版本。

  • 修改SQL,为 string_agg(text,',') 显式指定分隔符。

  • 建议升级到新版本。

P2

读取MaxCompute外部表数据时,使用 WITH 语句,查询结果与不带 WITH 语句的结果不一致。

在读取CFile、RANGE TABLE等格式的MaxCompute外部表时,同时命令语句中含有 WITH 子句且 WITH 子句输出的列顺序与表中列顺序不一致,Hologres外部表接口输出的结果顺序错误,导致查询结果不一致。

出现版本:

1.3.24至1.3.26版本。

修复版本:

1.3.27及以上版本。

  • 不使用 WITH 语句进行查询。

  • 建议升级到新版本。

P2

查询MaxCompute外部表ARRAY类型的字段报错: Array length did not match record batch length

访问MaxCompute ORC格式的表时,Hologres外部表对于ARRAY类型的字段接口长度处理不一致,导致ARRAY数据长度超过限制,出现报错。

出现版本:

1.3.20至1.3.26版本。

修复版本:

1.3.27及以上版本。

建议升级到新版本。

2022年10月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

将Distribution Key设置为空字符串时查询报错: Failed to get bh reader: internal error CONTEXT 。示例DDL如下:

call set_table_property('<table_name>', 'distribution_key', ' ');

Distribution Key设置为空字符串时,无法正确路由到数据所在的Shard,导致查询报错。

出现版本:

1.3.24及以下版本。

修复版本:

1.3.26及以上版本。

  • 重新建表,并设置合理的Distribution Key。

  • 建议升级到新版本。

    说明

    升级后仍然不支持Distribution Key设置为空,建表时会报错。

P2

查询MaxCompute外部表时报错: column with id 0 has type date64[ms] but ReadColumn returns array Array(type=timestamp[ms, tz=UTC]

Hologres读取MaxCompute外部表时,DATETIME类型转换错误,导致查询报错。

出现版本:

1.3.20至1.3.24版本。

修复版本:

1.3.25及以上版本。

建议升级到新版本。

P2

Hologres实例升级 V1.3.20版本后,查询带有数组类型字段的MaxCompute外部表时报错: internal error: IOError: Invalid flatbuffers message

读取MaxCompute外部表时,因读取接口版本较低,无法识别数组类型,导致查询报错。

出现版本:

1.3.20至1.3.24版本。

修复版本:

1.3.25及以上版本。

  • 暂时避免查询数组类型的字段。

  • 建议升级到新版本。

P2

PostgreSQL系统表导入至Hologres表,Hologres表结果随机变化,不稳定。示例如下:

-- 查询结果 22505
SELECT
count(1)
pg_class c inner join pg_attribute a on c.oid = a.attrelid
-- 创建内部表
CREATE TABLE public. tables11 (
schemaname name NULL
truncate public. tables11
-- 插入数据随机变换
insert into public.tables11
SELECT
'tmp'
pg_class c inner join pg_attribute a on c.oid = a.attrelid
select count(1) from public.tables11

PostgreSQL系统表为PostgreSQL原生系统表,Hologres是分布式系统,每个FE节点因为不断执行DDL导致节点的版本不一致。查PostgreSQL系统表时,从不同的节点获取数据,导致结果不稳定。

出现版本:

1.3.22至1.3.24版本。

修复版本:

1.3.25及以上版本。

建议升级到新版本。

P2

Hologres实例升级 V1.3.20及以上版本后, case when 语句中含有DECIAML类型字段的查询报错: internal error: column with id 0 has type decimal(38, 3) but ReadColumn returns array Array(type=decimal(38, 10) length=3 null_count=0

case when 语句中,DECIAML未被显示转换精度,优化器(QO)在推导执行计划时,精度推导错误,从而导致执行报错。

出现版本:

1.3.20至1.3.24版本。

修复版本:

1.3.24及以上版本。

建议升级到新版本。

P2

PostgreSQL系统视图导入到业务创建的Hologres表中,Hologres表中没有数据,示例SQL如下。

CREATE table holo_pg_tables (
schemaname text,
tablename text,
tableowner text,
tablespace text,
hasindexes text,
hasrules text,
hastriggers text,
rowsecurity text
insert into holo_pg_tables select * from pg_catalog.pg_tables;

Postgresql系统视图 pg_catalog.pg_tables 中有个过滤条件: c.relkind = ANY (ARRAY['r'::"char", 'p'::"char"]) ,此类型在转执行计划的时候被错误转成某个无意义的数值,导致没有数据命中。

出现版本:

1.3.22至1.3.24版本。

修复版本:

1.3.25及以上版本。

建议升级到新版本。

P2

使用Proxima向量查询时,为表设置了两个Proxima向量索引,查询时性能较设置一个索引时更差,设置索引的DDL示例如下。

call set_table_property
('t1', 'proxima_vectors', '
{"f2":{"algorithm":"Graph","distance_method":"InnerProduct"}},
{"f3":{"algorithm":"Graph","distance_method":"InnerProduct"}}
');

设置两个索引时,DDL中 {} 书写错误,应该一个索引对应一个 {} 。FE侧未正确拦截该格式的DDL,导致第一个索引构建成功,第二个索引被丢弃,从而导致查询性能下降,正确的书写格式如下:

call set_table_property
('t1', 'proxima_vectors', '{
"f2":{"algorithm":"Graph","distance_method":"InnerProduct"},
"f3":{"algorithm":"Graph","distance_method":"InnerProduct"}
}');

出现版本:

1.3.24及以下版本。

修复版本:

1.3.25及以上版本。

  • 重新建表并将设置索引DDL改为正确的书写格式。

  • 建议升级到新版本。

    说明

    升级最新版本后,仍然不支持该错误的书写,但是建表时会报错。

P2

非Superuser用户执行 select hg_dump_script('xxxx') 命令时报错: ERROR: permission denied for table pg_subscription

hg_dump_script 函数间接调用 pg_subscription 进行逻辑复制, pg_subscription 鉴权失败导致出现报错。

出现版本:

1.3.20至1.3.24版本。

修复版本:

1.3.25及以上版本。

  • 使用Superuser账号进行授权,命令示例如下。

    grant select on 
    pg_subscription to "xx";
  • 建议升级到新版本。

P2

使用RAM用户通过Flink消费Hologres Binlog或者通过DataHub写入数据至Hologres时,报错: NoSuchProject

接入节点(Frontend)对RAM用户解析错误,导致报错。

出现版本:

1.3.23及以下版本。

修复版本:

1.3.24及以上版本。

建议升级到新版本。

P2

Hologres实例从 V1.1版本升级至 V1.3版本后,MaxCompute外部表查询耗时增加,通过查看执行计划(explain sql)发现,表统计信息的 row_count 1000 ,即统计信息未自动更新。

Hologres实例升级到 V1.3版本后,Auto Analyze未检测到外部表的Schema,导致未能及时获取到外部表的统计信息。

出现版本:

1.3.14至1.3.23版本。

修复版本:

1.3.24及以上版本。

  • 手动执行 analyze <tablename> 命令。

  • 建议升级到新版本。

P2

查询语句中的 union all 含有DECIMAL类型字段时报错: Schema fields[4] has type decimal(14, 4) but decimal(11, 2) is expected

示例如下:

create table t1(n decimal(6,4));
create table t2(n decimal(5,3));
select * from (select 1 as type, n from t1 union all select 2 as type, n from t2)t where t.type=2;

使用 union all 在生成执行计划时,对DECIMAL类型的精度进行了额外裁剪,导致结果精度错误。

出现版本:

1.3.20至1.3.23版本。

修复版本:

1.3.24及以上版本。

建议升级到新版本。

2022年09月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

JDBC连接串指定了Schema,但是Schema没有生效,仍然为 public Schema。连接示例如下:

String jdbcUrl = "jdbc:postgresql://hostname: port /dbname?currentSchema=demo;

FE节点对于连接串中 ? 后的字符串未处理,导致 currentSchema 设置未生效。

出现版本:

1.3.14至1.3.22版本。

修复版本:

1.3.23及以上版本。

建议升级到新版本。

P1

创建了物化视图,SQL查询命中物化视图自动改写,导致实例出现短暂重启。

命中物化视图自动改写的SQL,优化器在生成执行计划时获取表的Meta数据失败,导致实例异常。

出现版本:

1.3.14至1.3.22版本。

修复版本:

1.3.23及以上版本。

建议升级到新版本。

P2

在一个实例内为不同用户设置不同的IP白名单策略,这些用户在白名单的IP内无法访问Hologres实例,报错: reject ip xxx

为用户设置IP白名单后,网关拦截了用户,导致实际上用户并没有被设置在白名单内。

出现版本:

1.3.21及以下版本。

修复版本:

1.3.22及以上版本。

  • 不设置IP白名单,或者将白名单的用户策略改为ALL(即将 数据库限制 参数设置为 ALL )。

  • 建议升级到新版本。

P2

Fixed Plan的点查场景下查询 Deciaml 类型数据报错: get result failed:scale should betewwn xxxx 。示例如下:

begin;
create table t (k1 int, k2 decimal(18, 2), primary key(k1, k2));
call set_table_property ('t', 'distribution_key', 'k1');
insert into t (1, 12.11);
set hg_experimental_enable_fixed_dispatcher_for_scan = on;
select * from t where k1=1 and k2>10.1 and k2 < 12.3;

Fixed Plan场景下 Deciaml 类型精度推导错误,导致结果报错。

出现版本:

1.3.20及以下版本。

修复版本:

1.3.21及以上版本。

建议升级到新版本。

P2

开启IP白名单之后,Flink消费Hologres Binlog报错: reject ip 1.xxx

Flink消费Hologres binlog使用的接口为Hologres实时数据导入接口(非JDBC模式),该接口暂不支持开启IP白名单功能。

出现版本:

1.3.20及以下版本。

修复版本:

1.3.21及以上版本。

  • 不设置IP白名单。

  • 建议升级到新版本。

P2

将数组类型显式转换成String类型时,报错: ERROR: Cast from LIST to STRING is not supported. 。示例如下:

create table aaa1(
a text[],
b int[]
insert into aaa1 values (ARRAY['1','aaa'], ARRAY[1,2,3]);
d=# select a::text, b::text from aaa1;

当前Hologres暂不支持将数组类型显式转换成String类型。

出现版本:

1.3.20及以下版本。

修复版本:

1.3.21及以上版本。

建议升级到新版本。

P1

在查询MC外表时,查询卡主,在重启实例后,卡主现象消失。

在Hologres读取MC元数据时, 如果MC元数据服务发生主备切换,Hologres没有能够正确处理异常场景,造成重试失败,引起查询卡主。

出现版本:

1.3.20及以下版本。

修复版本:

1.3.21及以上版本。

建议升级到新版本。

2022年08月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

使用JDBC Prepare Statement模式执行SQL查询时报错: cannot push query id when transaction is not start

在JDBC Prepare Statement模式下,执行SQL实际上还没有开始事务,导致无法生成Query ID,从而报错。

出现版本:

1.1.80至1.1.86版本。

修复版本:

1.3.20及以上版本。

  • JDBC连接串修改为Simple模式: jdbc:postgresql://<host>:<port>/<dbname>?preferQueryMode=simple

  • 建议升级到新版本。

P2

修改TTL时,设置的TTL值中间带了逗号(,): CALL set_table_property('wdt_qyb.wdt_qyb_trade', 'time_to_live_in_seconds', '315,360,000'); 导致数据很快被删除。

带逗号的TTL值 315,360,000 属于非法数值,在解析SQL时会默认将逗号后的值去掉,导致TTL被设置成了315s,数据因为过期被清理。

出现版本:

1.1.85及以下版本。

修复版本:

1.3.20及以上版本。

  • 设置TTL时使用INT类型且不使用逗号。

  • 建议升级到新版本。

    说明

    升级后,带逗号的非法TTL值在建表、修改TTL时,将会报错。

P2

行存表Clustering Key和PK设置不一致时,查询报错: internal error: Cannot build column col1

示例如下:

CREATE TABLE test(
col1 text,
col2 text,
col3 text,
PRIMARY KEY (col1, col2)
CALL set_table_property('public.test', 'distribution_key', 'col1'); 
CALL set_table_property('public.test', 'clustering_key', 'col1:asc');
SELECT * FROM public.test;

当行存表Clustering Key和PK设置不一致时,存储引擎会错误的生成相同的Record,导致查询报错。

出现版本:

1.1.84及以下版本。

修复版本:

1.3.20及以上版本。

  • 行存表设置相同的Clustering Key和PK。

  • 建议升级到新版本。

P2

非Superuser账号通过JDBC消费Hologres Binlog时,执行 call hg_create_logical_replication_slot('hg_replication_slot_1', 'hgoutput', 'hg_publication_test_1'); 命令时报错: permission denied for table hg_replication_slot_propretities

JDBC消费Hologres Binlog时需要使用Superuser账号,否则会没有权限。

出现版本:

1.1.83及以下版本。

修复版本:

1.3.20及以上版本。

P2

查询慢Query日志时缺少日志,但是监控信息上却显示延迟和QPS。

同一事务(Transaction)中不同Query有相同Query ID,元仓收集Query去重后只保留了一条Query,导致其他Query丢失。

出现版本:

1.1.80及以下版本。

修复版本:

1.3.20及以上版本。

建议升级到新版本。

P2

消费Hologres Binlog时报错: com.alibaba.hologres.org.postgresql.util.PSQLException: ERROR: relation "hologres.hg_replication_slot_properties" does not exist

实例因某个原因有过FE节点重启,节点恢复后没有将Hologres Binlog的Extension恢复,导致消费失败。

出现版本:

1.3以下版本。

修复版本:

1.3.20及以上版本。

建议升级到新版本。

2022年07月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

热升级之后查询表报错: File(fn: xxx) real size != size in meta: 0 != yyyy

实例进行热升级,热升级过程中表有离线BulkLoad写入,离线写入时数据会进行Compaction,导致元数据存在兼容性问题从而出现报错。

出现版本:

1.1.80及以下版本。

修复版本:

1.1.81及以上版本。

  • 实例热升级时暂停表的离线写入或者使用普通冷升级。

  • 建议升级到新版本。

P2

同时回写MaxCompute同一表的不同分区时报错: ERROR:commit uploder failedErrorMessage=Operation failed due to concurrent upload/insert operationson the same table

不同的MaxCompute分区属于同一个表,在回写时,回写接口执行 commit upload session 时会共享同一个表锁,导致锁冲突报错。

出现版本:

1.1.78及以下版本。

修复版本:

1.1.79及以上版本。

建议升级到新版本。

2022年06月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

Analyze OSS外部表时,出现OOM(Out Of Memory)。

在对OSS外部表执行Analyze时,OSS行数获取接口会默认采样的行数较大(超过3万行),从而出现OOM。

出现版本:

1.1.76及以下版本。

修复版本:

1.1.77及以上版本。

建议升级到新版本。

P2

含有 in 查询的SQL,当 in 中常量类型和列的实际类型不一致时,报错: internal error: Invalid filter value type int32 for column type int16

示例SQL如下。

create table test(pid smallint);
insert into test values (1);
select pid from test where pid not in (4, 5);

in 算子指定的常量数据类型和原列类型不同时,优化器(QO)没有对常量进行 cast 类型转换,导致在执行器(QE)端报错。

出现版本:

1.1.73及以下版本。

修复版本:

1.1.74及以上版本。

  • in 中的常量类型和列的类型保持一致。

  • 建议升级到新版本。

P2

创建OSS外部表时,只选择部分字段创建外部表,创建时报错: Open ORC file failed for schema mismatch

选择部分OSS字段创建外部表时,引擎对部分外部表的支持有限制,只能选择全部字段。

出现版本:

1.1.73及以下版本。

修复版本:

1.1.74及以上版本。

  • 选择全部字段创建外部表。

  • 建议升级到新版本。

P2

删除某一段区间的数据之后(如删除某个分区),立即对同一张表执行 insert 命令,写入的速度变慢。

当删除了一个区间或者一段连续的值之后,此时Compation还未全部完成,执行 insert 命令时,会先去查询该时间段是否有相同的记录,直到遇到第一条没被删除的记录才能停下来,如果查询的Key附近有大量连续删除的记录,会消耗很多时间在遍历这些记录上,导致 insert 命令写入速度慢。

出现版本:

1.1.70及以下版本。

修复版本:

1.1.71及以上版本。

建议升级到新版本。

2022年05月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

查MaxCompute表报错: Timestamp overflow detected while converting timestampfrom orc VectorBatch to arrow

在MaxCompute表中有TIMESTAMP类型,使用Tunnel写入后TIMESTAMP精度会变成纳秒,目前Hologres暂不支持精度为纳秒的TIMESTAMP,导致报错。

出现版本:

1.1.69及以下版本。

修复版本:

1.1.70及以上版本。

  • 修改MaxCompute表的TIMESTAMP类型为DATATIME类型。

  • 建议升级到新版本。

P2

查询OSS Parquet数据时,通过 count 语句每次查出的结果不一致,而OSS数据没发生过变化。

Hologres读OSS Parquet文件时,接口版本较老,导致读取非Null数据中会随机出现Null值,从而查询结果错误。

出现版本:

1.1.67及以下版本。

修复版本:

1.1.68及以上版本。

建议升级到新版本。

P2

在Hologres中使用SQL方式将数据回写MaxCompute时报错: Blocks not match, server:xx client yy

在回写MaxCompute时,超时时间默认为300s,导致产生了空的Block,从而出现报错。

出现版本:

1.1.64及以下版本。

修复版本:

1.1.65及以上版本。

  • 通过执行如下命令修改超时时间。

    alter server odps_server options (add socket_timeout '600');

    修改超时时间为 600s ,不容易产生空Block。

  • 建议升级到新版本。

P2

Hologres V1.1版本在对MaxCompute外部表增加多列时报错: not support alter table with multi commands 。示例SQL如下。

ALTER FOREIGN TABLE bank 
ADD COLUMN cons_conf_idx float8, 
ADD COLUMN euribor3m float8;

Hologres V1.1版本增加了对外部表 add column 状态的检查,当增加多列时,状态检查错误,导致增加列失败。

出现版本:

1.1.1至1.1.58版本。

修复版本:

1.1.59及以上版本。

P1

使用 to_date 函数带where过滤条件查询时报错: invalid value \"\" for \"YYYY\" HGERR_detl Field requires 4 characters, but only 0 could be parsed 。示例查询SQL如下。

select *  from public.test 
where to_date(content, 'YYYYMMDD' ) 
BETWEEN  '2021-10-22' AND '2021-10-23' limit 10;

使用 to_date 函数带where过滤条件时,where过滤的数据被识别为了非法数据进行转换,导致报错。

出现版本:

1.1.58及以下版本。

修复版本:

1.1.59及以上版本。

建议升级到新版本。

P2

并发读取MaxCompute加密的表时,出现报错: failed to load row group data from file pangu

在并发读取MaxCompute加密表时,Reader并发解析加密对象, 导致解密错误。

出现版本:

1.1.57及以下版本。

修复版本:

1.1.58及以上版本。

建议升级到新版本。

P2

对NUMERIC或者DECIMAL类型的字段执行求余(%)计算,且下推至HQE中执行,导致计算结果不正确。

HQE不支持NUMERIC和DECIMAL类型的求余,但未做类型校验,导致结果出错。

出现版本:

1.1.55及以下版本。

修复版本:

1.1.56及以上版本。

  • 不对NUMERIC和DECIMAL类型的字段执行求余计算。

  • 建议升级到新版本。

    说明

    升级后仍然不支持对NUMERIC和DECIMAL类型的字段执行求余计算,会直接报错。

2022年04月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

通过JDBC订阅Hologres Binlog,启动JDBC消费Binlog作业 pgreplicationstream.start() 在数据库端同时执行 drop table xx; 删除对应表,导致实例出现短暂重启。

订阅Binlog时删除表,会导致订阅时表不存在,但是订阅Binlog需要获取表的 table_properties , 导致空指针,出现实例重启现象。

出现版本:

1.1.54及以下版本。

修复版本:

1.1.55及以上版本。

  • 订阅Hologres Binlog时不删除表。

  • 建议升级到新版本。

    说明

    升级Hologres实例后若是订阅Binlog时删除表,会报表不存在。

P2

分区子表执行 detach 父表之后,再 attach 至同一个父表上,无法 attach

通过 CREATE TABLE <table_name> PARTITION OF <parent_table> 命令创建的分区子表,不会继承父表的Table Group属性,当分区子表 detach 后再进行 attach 时,校验出子表与父表的Table Group属性不一致,导致无法进行 attach

出现版本:

1.1.52及以下版本。

修复版本:

1.1.53及以上版本。

建议升级到新版本。

P2

当使用 Grouping sets 和多个 Count Distinct 对分区表进行查询时,查询结果不正确。

Grouping sets 和多个 Count Distinct 对分区表查询时,优化器未对分区进行裁剪,导致分区过滤条件未命中,从而出现结果不正确。

出现版本:

1.1.52及以下版本。

修复版本:

1.1.53及以上版本。

建议升级到新版本。

2022年03月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

通过DLF查询OSS外部表时报错: failed to import foreign schema ,创建 user-mapping 后能正常查询。

没有设置 user-mapping 时,鉴权接口传递权限错误,导致查询报错。

出现版本:

1.1.50及以下版本。

修复版本:

1.1.51及以上版本。

  • 显式设置 user-mapping ,详情请参见 OSS数据湖加速

  • 建议升级到新版本。

    说明

    升级到新版本后不需要显示创建 user-mapping 即可正常访问相关数据。

P2

PrepareStatement模式下查询SQL报错: unrecognized node type: 0 或者Hologres实例出现短暂重启。

PrepareStatement模式下可以对反复执行的SQL生成Plan cache,减少接入端的开销。而在当前版本PrepareStatement模式对SQL的Plan cache获取不及时,导致查询出错。

出现版本:

1.1.47至1.1.50版本。

修复版本:

1.1.51及以上版本。

  • 使用 jdbc:postgresql://<host>:<port>/<dbname>preferQueryMode=simple 命令将JDBC连接串修改为Simple模式。

  • 建议升级到新版本。

P1

Blink或者Flink RPC模式写入Hologres时报错: failed to create channel into server xxx,connection refused to rpc proxy endpoint

使用Blink或者Flink RPC模式写入Hologres时,接口未返回Rpcproxy端口,导致写入报错。

出现版本:

1.1.50及以下版本。

修复版本:

1.1.51及以上版本。

  • 将Flink作业切换为JDBC写入模式,详情请参见 Flink全托管

  • 建议升级到新版本。

P2

执行含有 union all 的Join SQL命令时报错: internal error: 0 shard end shard value: xxx doesn\'t

union all 的JOIN SQL在推导执行计划时错误,导致报错。

出现版本:

1.1.49及以下版本。

修复版本:

1.1.50及以上版本。

建议升级到新版本。

P2

使用 json_array_elements 函数且SQL中含有Join命令时,报错: Duplicate keys detected when building hash table

执行引擎(QE)在执行Join算子时会构建哈希表,但是实际读数据时,没有正常过滤 json_array_elements 处理后的数据,导致读取的数据有重复从而报错。

出现版本:

1.1.49及以下版本。

修复版本:

1.1.50及以上版本。

建议升级到新版本。

P2

执行Join SQL时报错: Explicit remote seek from a source is not supported

Join SQL生成的执行计划(通过 explain sql 查看)是Nested Loop Join时,执行引擎获取Nested Loop Join相关的执行计划错误,导致执行报错。

出现版本:

1.1.49及以下版本。

修复版本:

1.1.50及以上版本。

建议升级到新版本。

P2

SQL过滤条件中含有 not in 时,查询结果中仍然含有 not in 过滤的数据。示例如下。

create table if not exists test(id bigint,  value int);
select id from test where id in (238024008,276941010) and id not in (238024008) and value in (1, 2, 3);

优化器在生成执行计划时,对 not in 处理错误,生成了错误的执行计划,导致 not in 过滤条件丢失,结果出错。

出现版本:

1.1.48及以下版本。

修复版本:

1.1.49及以上版本。

建议升级到新版本。

P2

SLPM权限模型下,修改Schema名称时执行 CALL slpm_rename_schema ( old_name, new_name ) 命令,报错: UPDATE is not supported

SLPM权限模型下修改Schema时,权限接口判断错误,导致执行报错。

出现版本:

1.1.47及以下版本。

修复版本:

1.1.48及以上版本。

建议升级到新版本。

2022年02月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

SPM或者SLPM模式下,开启数据脱敏后,进行Auto Analyze或者Analyze失败。

后端会使用表Owner去执行Auto Analyze,但SPM或者SLPM模式下,表的Owner是Developer,没有登录权限,而对脱敏列采样时会走PQE,导致Auto Analyze或者Analyze失败。

出现版本:

1.1.1至1.1.46版本。

修复版本:

1.1.47及以上版本。

  • 关闭数据脱敏。

  • 建议升级到新版本。

P1

Analyze外部表时,外部表分区太多(通常是多级分区场景)报错超过分区限制(大于512分区),导致Analyze失败。

Analyze时未对外部表分区进行相应裁剪,导致Analyze失败。

出现版本:

1.1.1至1.1.46版本。

修复版本:

1.1.47及以上版本。

  • 若是外部表分区数在1024以内,可以先将外表分区限制调大再执行Analyze。

  • 建议升级到新版本。

    说明

    升级后默认Analyze 最多512个外部表分区,若是需要更多分区,请将Analyze分区限制数调大,详情请参见 优化MaxCompute外部表的查询性能

P1

执行 explain analyze SQL命令时,结果中 partitions selected 为0,与实际命中分区不符。

生成执行计划时对 partitions selected 判断错误,导致结果为0。

出现版本:

1.1.1至1.1.46版本。

修复版本:

1.1.47及以上版本。

建议升级到新版本。

P2

查看慢Query日志时,无法显示查询读取的行数(read_rows)、返回行数(result_rows)等信息。

元仓采集信息不全导致。

出现版本:

1.1.1至1.1.46版本。

修复版本:

1.1.47及以上版本。

建议升级到新版本。

说明

Hologres V1.1.36版本开始可以通过GUC参数查看,V1.1.47版本后可以不使用GUC参数。

P2

使用JDBC PrepareStatement模式时, insert 或者 select 多个值时,多执行几次(大于3次)结果出现错行错列,而一次 insert 或者 select 一个值分多次执行时结果正确。示例如下:一条SQL包含32个values一次写入,总共写4次,每次这32行数据在values中的顺序随机变化。而一条SQL只包含一个values,分32条sql写入,结果正确。

PrepareStatement模式下对多个values进行多次 insert 或者 select 时,优化器(QO)生成了错误的执行计划,导致结果出错。

出现版本:

1.1.46及以下版本。

修复版本:

1.1.47及以上版本。

  • Query符合Fixed Plan特征时,可以开启 Fixed Plan加速SQL执行

  • 将PrepareStatement模式更改为Simple模式。

  • 建议升级到新版本。

P2

执行非Join的SQL(例如含有count distinct)时,报错: error: Hash32 shard function does not support decimal or fixed binary type

非Join的SQL也可能会使用Shard Function生成执行计划,而目前Shard Function目前不支持NUMERIC等类型,导致部分非精确类型在执行时报错。

出现版本:

1.1.46及以下版本。

修复版本:

1.1.47及以上版本。

建议升级到新版本。

P1

在使用 key = max(key) 时,出现的结果不符合预期,一直只出现一行数据,使用 key in max(key) 时符合预期。

优化器在生成执行计划时,会将 key = max(key) ,转化成 order by id asc limit 1 , 这种查询永远只有一行数据,导致结果不符合预期。

出现版本:

1.1.46及以下版本。

修复版本:

1.1.47及以上版本。

  • 使用 key in max(key)

  • 建议升级到新版本。

P2

非PostgreSQL来源(如JDBC)的DDL有SQL代码注释,示例: create table ttxwsx1(i int); -- comments -- xxxxx 执行成功后,写入或者查询时出现卡死的现象。

DDL命令末尾有注释,会使得同一行最后的分号失去命令间的分隔作用,导致新生成的命令追加到注释后面失效,从而使得SQL不合法,导致节点间Replay失败,造成写入或者查询卡死。

出现版本:

1.1.45及以下版本。

修复版本:

1.1.46及以上版本。

  • 删除DDL语句最后的注释。

  • 建议升级到新版本。

P1

按照主键点查方式查询行存表时,存在一定概率场景,出现部分行存数据查询不到的情况。

行存表在做后台文件compaction时,在处理并发场景有缺陷,致使部分索引文件定位有误,导致部分行存数据查询不到。

出现版本:

1.1.44及以下版本。

修复版本:

1.1.45及以上版本。

建议升级到新版本

P2

Hologres实例升级至 V1.1版本后,查询MaxCompute外部表,当外部表有多级分区时(一般3级分区),SQL过滤条件中带有 or ,查询相比V0.10版本变慢(之前查询只需要几秒钟)或者出现OOM。

Hologres V1.1版本,在多级分区过滤中,优化器对 or 条件生成的算子无法识别,导致生成的filter为空,即不做任何过滤,从而扫描了所有分区,导致查询变慢或者出现OOM。

出现版本:

1.1.44及以下版本。

修复版本:

1.1.45及以上版本。

建议升级到新版本

P1

CPU占用不高时内存也长期处于高水位,通过监控发现QPS比较高(几百及以上),但是连接数只用了几十个,即一个Connection保持几百个QPS的速度执行SQL。

当执行SQL时,优化器会去获取表的statistics,当一个Connection保持几百个QPS的速度执行SQL,且Connection长期不关闭,导致获取statistics时泄漏,造成内存高水位。

出现版本:

1.1.44及以下版本。

修复版本:

1.1.45及以上版本。

  • 通过添加 set hg_experimental_alway_show_execution_statistics=off; 参数解决。

  • 建议升级到新版本。

P2

SQL中含有 not like xxx% 条件,但是查询结果中仍然出现 not like 过滤后的数据。

优化器在生成执行计划时,对 like 相关的函数预处理规则出错,进行了错误的改写,导致结果不正确。

出现版本:

1.1.44及以下版本。

修复版本:

1.1.45及以上版本。

  • 带like的SQL出错时可以通过添加 hg_experimental_remove_redundant_cmp=off; 参数解决。

  • 建议升级到新版本。

P1

STS账号登录时,报错: Cloud authentication failed ,并且检查账号密码等都没有填写错误。

账号认证接口对STS账号的状态判断错误,导致报错。

出现版本:

1.1.43至1.1.44版本。

修复版本:

1.1.45及以上版本。

建议升级到新版本

P0

在应用侧数据写入完成,但引擎侧数据写入进程崩溃,有概率存在数据丢失,用户查询时发现数据缺少。

正常流程是用户写数据,WAL(Write Ahead Log)落盘后才返回给上层调用,表示写入完成,保证数据持久化和一致性。但当落盘进程写入超时触发系统重试后,数据会首先写入内存缓存部分,并返回给上层调用,如果此时内存缓存进程崩溃后,会造成应用层返回成功,但实际数据存储层丢失的问题。

出现版本:

0.8及以下版本。

修复版本:

0.9及以上版本。

建议升级到新版本

P1

实例写入和查询数据时失败并报错: ERROR: Invoke StoreMasterClient failed:ERPC_ERROR_CONNECTION_CLOSED

出现报错后,业务侧进行Query重试叠加后端接入节点(FE)重试,导致请求量太高,Store Master(元数据管理)处理不及时而报错。

出现版本:

1.1.43及以下版本。

修复版本:

1.1.44及以上版本。

  • 使用 set optimizer_join_order=query 命令,暂时绕过。

  • 建议升级到新版本。

P2

新增一列类型为DECIMAL且不指定精度的列,如 alter table add column c0 decimal; Query执行成功,但是查询新加的列时出现报错: Schema fields[] has type decimal(x,y) but decimal(x1, y1) is expected.

当前新增列不支持DECIMAL不指定精度,但是新增列(Add Column)时没有做精度校验,导致查询报错。修复后在新增列时会对精度校验,未指定精度会报错。

出现版本:

1.1.42及以下版本。

修复版本:

1.1.43及以上版本。

  • 新增列时含有DECIMAL字段时需要指定精度。

  • 建议升级到新版本。

P0

当AccessKey被禁用后,仍然能使用被禁用的AccessKey访问Hologres实例。

AccessKey接口对于禁用的AccessKey状态调用错误,导致禁用的AccessKey被当成了正常的AccessKey使用。

出现版本:

1.1.42及以下版本。

修复版本:

1.1.43及以上版本。

  • 取消账号的访问权限。

  • 建议升级到新版本。

P2

建表时有Default字段,使用 copy 命令语句时,实例出现重启。

copy 功能不支持建表时带有Default值,导致实例OOM发生重启。

出现版本:

1.1.42及以下版本。

修复版本:

1.1.43及以上版本。

建议升级到新版本。

P2

执行有外表关联的INNER JOIN查询语句时,报错找不到某一列,如: ERROR: column "id" does not exist ,而SQL中并没有这一列。

优化器在生成执行计划时,对于等价表达式的推导不对,没有输出的列也作为了等价表达式的推导,导致报错。

出现版本:

1.1.42及以下版本。

修复版本:

1.1.43及以上版本。

建议升级到新版本。

P1

使用行列共存的表,带有复杂的Nested Loop Join,出现实例重启后又快速恢复。

优化器在检测行列共存的表时,没有生成正确的执行计划,导致报错从而触发实例重启。

出现版本:

1.1.42及以下版本。

修复版本:

1.1.43及以上版本。

  • 不使用行列共存的表

  • 建议升级到新版本。

P1

多表(如6个表)Join的复杂导入作业在手动取消后,CPU使用率仍然为100%,持续几个小时不结束,执行 drop table 时也卡住。

比较复杂的Query,执行计划包括Hash Join算子,涉及到的数据量很大,后端出现锁死,导致取消后仍然在后端运行中。

出现版本:

1.1.42及以下版本。

修复版本:

1.1.43及以上版本。

  • 重启实例。

  • 建议升级到新版本。

2022年01月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2

数据通过DataHub写入Hologres分区表时,分区表未提前创建分区子表,Hologres实例重启。

DataHub写入Hologres分区表时,写入接口未做分区校验,引发实例Coredump。

出现版本:

1.1.41及以下版本。

修复版本:

1.1.42及以上版本。

  • 在Hologres中提前创建好分区子表再写入数据。

  • 建议升级到新版本。

    说明

    若是分区表,升级后仍然需要提前创建分区子表才能写入数据。

P2

分区子表通过 attach 到分区父表后,查分区表时报错: partition_table_missing

分区子表的建表属性与分区父表不一致(比如not null约束、PK设置,Clustering Key设置等),在 attach 时没有对属性进行校验,导致查询报错。

出现版本:

1.1.41及以下版本。

修复版本:

1.1.42及以上版本。

  • 建分区子表时,子表的Schema和属性需要同 attach 的分区父表保持一致。

  • 建议升级到新版本。

P1

使用JDBC PreparedStatment模式时,SQL中的 where 命令中含有"<"或者">"过滤条件,执行后出现实例重启。

使用JDBC PreparedStatment模式时, where 中的"<"或者">"过滤条件会在生成执行计划时,转换成INTERVAL,在转换时遇见空指针,导致SQL出错引发实例重启。

出现版本:

1.1.0至1.1.40及以下版本。

修复版本:

1.1.41及以上版本。

建议升级到新版本。

P1

使用JDBC PreparedStatment模式时, IN 条件超过100个时,有一定概率结果出错或者不符合预期。

当使用JDBC PreparedStatment模式时, IN 条件超过100个时,生成执行计划时会错误的把 IN 条件给删除,导致数据结果出错。

出现版本:

1.1.0至1.1.40及以下版本。

修复版本:

1.1.41及以上版本。

建议升级到新版本。

P2

行列共存的表使用 IN 条件查询时报错: An I/O error occurred while sending to the backend. ,使用行存表则不会报错。

IN 条件中的字段类型是TEXT时,并且该字段设置了Bitmap,导致行列共存的表生成了错误的执行计划,从而报错。

出现版本:

1.1.0至1.1.40及以下版本。

修复版本:

1.1.41及以上版本。

  • 使用行存表。

  • 建议升级到新版本。

P2

执行SQL, where 条件中有 and 连接 in = 时报错: ERROR: serialized_error_msg is null 。示例SQL:

SELECT * FROM public.conflict_1 where a in (1,31) and a=1;

后端在判断 and 两侧 in = 的数据类型时判断错误(示例:假如是 a = 1 就是一个int类型, a in (1,2,3) 就是一个array 类型),导致执行失败。

出现版本:

1.1.0至1.1.40及以下版本。

修复版本:

1.1.41及以上版本。

建议升级到新版本。

P2

修改分区子表的生命周期(TTL)后出现报错: Invoke StoreMasterClient failed:ERPC_ERROR_CONNECTION_CLOSED

修改子表TTL时,元数据管理器Store Manager(SM)检验Schema变动时出错,导致SQL出现报错。

出现版本:

1.1.0至1.1.40及以下版本。

修复版本:

1.1.41及以上版本。

  • 暂不修改子表TTL。

  • 建议升级到新版本。

P2

使用 DROP 语句删除表时报错: invalid table id ,重试时报错: SE object lock failed

一个实例会有多个接入节点,执行SQL时,是先在一个节点执行,再去其他节点重放(reply),当某个节点因为版本等原因无法跟其他节点保持元数据信息一致时,会进行重试(retry)。当并发执行 drop table 时,会触发节点的主动,retry时没有释放表锁导致报错。

出现版本:

1.1.39及以下版本。

修复版本:

1.1.40及以上版本。

  • 串行执行 drop table 等DDL。

  • 建议升级到新版本。

P1

开启Auto Analyze功能之后,实例没有明显上涨的QPS,出现报错: database is not accepting commands to avoid wraparound data loss in database

开启Auto Analyze功能之后,接入节点的系统表没有及时执行 auto vacuum ,导致后台不断提交带事务的SQL,导致实例报错。

出现版本:

1.1.38及以下版本。

修复版本:

1.1.39及以上版本。

建议升级到新版本。

P2

基于分区表创建视图,并对分区列做 cast ,导致不能使用静态分区裁剪,导致扫描所有分区性能变差。示例SQL如下:

--建view
create view test_partition_table_view asselecttest_partition_table.ds::text as dsfromtest_partition_table;
--查询sql
select * from test_partition_table_view where ds='20211116';

封装成View之后,在优化器中的过滤条件是基于 cast 之后的列,而非分区列。分区裁剪只能对分区列生效,导致性能变差。

出现版本:

1.1.38及以下版本。

修复版本:

1.1.39及以上版本。

  • View中不对分区列进行 cast

  • 建议升级到新版本。

P2

  • 当日期是周日时,执行 to_char(xxx, 'Day') 函数,实例发生重启。

  • 当日期是周日时,执行 to_char(xxx, 'D') 函数,结果有误。

当日期是周日时, to_char() 函数的底层执行逻辑是 toDayOfWeek() ,其返回值为 7 ,发生数组越界,导致Hologres实例重启或者结果有误。

出现版本:

1.1.36及以下版本。

修复版本:

1.1.37及以上版本。

建议升级到新版本。

P1

实例开启数据脱敏后,子查询(Sub Query)中含有CTE函数,实例短暂出现连接报错或者I/O口报错。

递归调用处理CTE函数时,数据脱敏处理不正确,导致Hologres实例重启。

出现版本:

1.1.36及以下版本。

修复版本:

1.1.37及以上版本。

  • 关闭数据脱敏。

  • 建议升级到新版本。

2021年12月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P0

为TEXT类型字段设置Dictionary索引时,实例出现短暂重启,示例SQL如下。

call set_table_property('tbl', 'dictionary_encoding_columns', 'a');

,其中 a 是TEXT类型。

Hologres会给TEXT类型的字段默认设置Dictionary,即为 auto 属性,手动再给TEXT类型指定Dictionary时,会变为 on 属性,导致文件状态不一致,无法进行压缩合并(Compaction),从而引发Coredump。

出现版本:

1.1至1.1.35及版本。

修复版本:

1.1.36及以上版本。

  • 手动设置dictionary时,设置为 auto 属性,即: call set_table_property('tbl', 'dictionary_encoding_columns', 'a:auto');

  • 建议升级到新版本。

P2

查看慢Query日志时,无法显示查询读取的行数(read_rows)、返回行数(result_rows)等信息。

元仓采集信息不全导致无法显示。

出现版本:

1.1至1.1.35及版本。

修复版本:

1.1.36及以上版本。

建议升级到新版本,且需要在查看慢Query的SQL前添加如下命令。

  • set hg_experimental_force_sync_collect_execution_statistics = on;
  • alter database <dbname> set hg_experimental_force_sync_collect_execution_statistics = on;

P1

当SQL的where条件中含有 case when xx in ('') 时,结果不正确。

Hologres会默认对TEXT类型构建Bitmap,且该列是Nullable属性的情况下,后端对 case when xx in ('') 生成了错误的执行计划,导致结果不正确。

出现版本:

1.1.35及以下版本。

修复版本:

1.1.36及以上版本。

建议升级到新版本。

P1

报错: Cannot reserve capacity larger than 2^31 - 1 for binary\n

Hologres会默认对TEXT列构建Dictionary字典编码,当插入的字段太大(单字段超过2GB)时,导致构建的Dictionary过大,查询时报错。

出现版本:

1.1.35及以下版本。

修复版本:

1.1.36及以上版本。

建议升级到新版本。

P1

查Binlog时,带有Binlog字段的SQL查主键(PK)字段时查不出数据,不带Binlog的SQL查PK字段时能查询出数据。示例查询(其中a是test表的PK字段)如下。

--带Binlog的SQL
SELECT, hg_binlog_lsn ,hg_binlog_event_type,hg_binlog_timestamp_us
FROM testwhere a = '723295948321120659';
--不带Binlog的SQL
“SELECT * FROM testwhere a = '723295948321120659';

后端优化器根据PK字段查询时生成了错误的执行计划,导致查询错误。

出现版本:

1.1.35及以下版本。

修复版本:

1.1.36及以上版本。

建议升级到新版本。

P2

实例在CPU负载满的情况下,在HoloWeb中无法查询活跃Query、活跃连接等信息。

在CPU负载满时, pg_stat_activity 等系统表会受资源限制,导致查询失败。

出现版本:

1.1.35及以下版本。

修复版本:

1.1.36及以上版本。

建议升级到新版本。

P1

使用ANY数组为空时,Hologres实例出现重启。

对于ANY数组为空时后端处理不正确,导致实例Coredump。

出现版本:

1.1.35及以下版本。

修复版本:

1.1.36及以上版本。

建议升级到新版本。

P1

Query包含 Lead Lag 函数,同时函数的第三个参数缺省时报错: Column column5 should be non-nullable but the values contain 1 nulls

执行器对于 Lead Lag 函数的输出结果的Nullable推导不正确,导致报错。

出现版本:

1.1.34及以下版本。

修复版本:

1.1.35及以上版本。

建议升级到新版本。

P2

Flink写入Hologres时,有RoaringBitmap字段,写入很慢。

带有RoaringBitmap的写入链路没有在后端优化导致写入性能差。

出现版本:

1.1.35及以下版本。

修复版本:

1.1.36及以上版本。

  • 不使用Roaring Bitmap。

  • 建议升级到新版本。

P1

使用Roaring Bitmap时报错: An I/O error occurred while sending to the backend 并且在CPU使用率很低时,内存使用率很高。

Roaring Bitmap存在内存泄漏。

出现版本:

1.1.34及以下版本。

修复版本:

1.1.35及以上版本。

  • 不使用Roaring Bitmap。

  • 建议升级到新版本。

P1

SQL中有 order by 时报错: PlStmt Translation: Attribute number 4 not found in project list

order by 会生成sort算子,优化器在生成执行计划时下推错误,导致无法生成执行计划,从而报错。

出现版本:

1.1.33及以下版本。

修复版本:

1.1.34及以上版本。

建议升级到新版本。

P1

使用Proxima查询时报错: HGERR_code XX000 HGERR_msge internal error: record batches is empty

后端读取Proxima的文件状态有误,从而报错。

出现版本:

1.1.33及以下版本。

修复版本:

1.1.34及以上版本。

建议升级到新版本。

P2

实例升级至1.1版本或者在1.1版本对实例执行升降配等重启操作后,第一次查询时,Query的速度变慢,查看执行计划,统计信息不准确。再次执行Query,统计信息正确且性能恢复。

实例升级重启后,第一次执行Query时未能拿到正确的统计信息版本,导致统计信息不准确,性能变差。

出现版本:

1.1至1.1.32版本。

修复版本:

1.1.33及以上版本。

  • 可以多次执行Query,使得统计信息变正确,恢复性能。

  • 建议升级到新版本。

P0

使用 drop/truncate 命令时同时查询表,造成实例重启。

查询结束到数据析构之间,发生表的 drop/truncate ,造成实例coredump,从而重启。

出现版本:

1.1.32及以下版本。

修复版本:

1.1.33及以上版本。

建议升级到新版本。

P1

升级至1.1版本后,多表(十几个表)Join出现OOM异常,且升级前运行正常。

优化器预估表的行数过多,导致执行器在初始化阶段OOM,无法进行下一步计算。

出现版本:

1.1至1.1.31版本。

修复版本:

1.1.32及以上版本。

建议升级到新版本。

P2

Serving点查场景,因为客户端凑批导致延迟变高。

每个Worker节点上只有一个点查写入节点,当请求都发到写入节点时容易产生凑批行为,而当前凑批上限过大,导致等待攒批耗时较长,造成点查延迟变高。

出现版本:

1.1至1.1.31版本。

修复版本:

1.1.32及以上版本。

建议升级到新版本。

P1

存储加密的表 limit offset 命令不加 order by limit 能查到结果,加了就查不出结果。

对于存储加密的表,没有按照文档正确的配置进行操作,生成了错误版本,导致内存表(MemTable)数据丢失,从而无法出结果。

出现版本:

1.1至1.1.31版本。

修复版本:

1.1.32及以上版本。

建议升级到新版本。

P1

执行 Truncate 命令时,当表名称有大写时会报错找不到表。例如执行 #truncate "Abc"; ,报错: ERROR: relation "abc" does not exist

当前 Truncate 对大小写处理逻辑错误。

出现版本:

1.1.30及以下版本。

修复版本:

1.1.31及以上版本。

建议升级到新版本。

P1

使用函数 to_char to_date to_timestamp 时报错: time after 2282 not supported

函数 to_char to_date to_timestamp 支持的时间范围是1925 ~ 2282年,超出时间范围就会报错。

出现版本:

1.1.30及以下版本。

修复版本:

1.1.31及以上版本。

建议升级到新版本,升级后可以通过GUC控制时间范围,支持所有时间的数据,如下所示。

  • set hg_experimental_functions_use_pg_implementation = ‘to_char’;

  • set hg_experimental_functions_use_pg_implementation = ‘to_date’;

  • set hg_experimental_functions_use_pg_implementation = ‘to_timestamp’;

P1

SQL中有内连接(inner join),执行后运算结果偏少。

Join算子要求相同的 join key 数据分布推导在相同并发节点,实际执行时,数据分布推导错误,会错误的将相同数据Shuffle到不同的节点,导致 Join 结果错误,表现为结果比实际少。

出现版本:

1.1.30及以下版本。

修复版本:

1.1.31及以上版本。

建议升级到新版本。

P1

执行SQL时报错: Query could not generate plan by Hologres : PlStmt Translation: Attribute number 4 not found in project list

表连接时没有 Join Key ,导致执行计划生成失败报错。

出现版本:

1.1至1.1.27版本。

修复版本:

1.1.28及以上版本。

  • 重新建表,然后执行 analyze table 命令。

  • 建议升级到新版本。

P1

使用 get_json_object 函数时报错: Column column0 should be non-nullable but the values contain 1 nulls

get_json_object 函数的两个参数为非Nullable类型,但是UDF的结果可能为Nullable类型,在生成执行计划时,检查非Nullable失败,导致报错。

出现版本:

1.1.27及以下版本。

修复版本:

1.1.28及以上版本。

建议升级到新版本。

P1

报错: ERROR: Build query failed: Table group [] from table must equals table group [] from QO.

执行计划生成中,DML节点对下游TG有信息要求,但下游某节点推断出的TG属性为NULL,没有满足DML的TG要求,导致报错。

出现版本:

1.1.27及以下版本。

修复版本:

1.1.28及以上版本。

建议升级到新版本。

P1

执行 DROP TABLE 命令时卡死,且重试之后CPU突然飙高。

实例开启了 Auto Analyze Auto Analyze 会加share_update_exclusive锁, 同时 Auto Analyze 会使用连接,新的连接load_stats,会加access_shared_lock;这两个步骤期间,如果用户进行 DROP TABLE 就会卡死。

出现版本:

1.1.27及以下版本。

修复版本:

1.1.28及以上版本。

  • 建议在业务低峰期开启Auto Analyze功能。

  • 建议升级到新版本。

2021年11月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P2(优化)

当实例重启后,查询部分数据结果不一致。

后端某一个节点重启后,需要与其他节点版本追齐,在追齐过程中,重启的节点版本较低,查询的还是原数据,导致结果查询不一致。优化后的行为是,当节点重启后,若是与其他节点版本不一致,则不提供服务,直到追齐版本后再提供服务,保证数据一致性。

出现版本:

1.1.24及以下版本。

修复版本:

1.1.26及以上版本。

建议升级到新版本。

P2

MaxCompute数据导入时,执行 set hg_experimental_foreign_table_split_size = 64; INSERT INTO public.lineitem SELECT * FROM public.odps_lineitem_1t ; 时内存很高或者报错OOM,当设置参数值为128时,则没有问题。

底层在Meta中,加载了所有StripesMeta导致内存飙高。

出现版本:

1.1.24及以下版本。

修复版本:

1.1.26及以上版本。

  • 暂时不使用 set hg_experimental_foreign_table_split_size = 64; 命令。

  • 建议升级到新版本。

P1

当对 Distribution Key 或者 Primary Key 使用 IN 操作, IN 数组超过100个的时候,导致最终结果不正确。

IN 超过100个后,Shard pruning之后的Shard数量随机变化,导致生成的计划错误,结果不正确。

出现版本:

1.1.24及以下版本。

修复版本:

1.1.26及以上版本。

  • 减少 IN 的数量至100以内。

  • 建议升级到新版本。

P1

在外部表数据导入内部表的时候,先 insert 然后 delete 历史数据,但是 insert 语句取出来的分区不是最新分区,导致插入数据为0。

在导入过程中,存在存储器异常问题,导致未获取到最新数据。

出现版本:

1.1.24及以下版本。

修复版本:

1.1.26及以上版本。

建议升级到新版本。

P1

当行很宽,数据量超过数百MB时,单行记录就超出了 RECORDBATCH 记录批规格的上限,就会输出0行的 RECORDBATCH ,从而引发缺陷,实例进行重启。

当行很宽时,后端对行数的处理不够,导致实例进行重启。

出现版本:

1.1.24及以下版本。

修复版本:

1.1.26及以上版本。

建议升级到新版本。

P2

报错: internal error: string decimal literal can not be tentative

SQL中有 in 表达式,例如: select * from tbl where col in (1.11, 1.2, 1.333); in 表达式里面的DECIMAL精度不一致的时候,后端计算引擎处理结果不一致导致报错。

出现版本:

1.1.24及以下版本。

修复版本:

1.1.26及以上版本。

  • in 表达式里只用一个数据。

  • 建议升级到新版本。

P2(优化)

报错: org.postgresql.util.PSQLException: ERROR: Total memory used by all existing queries exceeded memory limitation 20132659200: xxxxx bytes used.

单个节点计算内存超过20GB的上限(单个节点总上限是64GB,1/3用于计算,1/3用于缓存,1/3用于元数据)。

出现版本:

1.1.23及以下版本。

修复版本:

1.1.24及以上版本。

在1.1.24版本支持单个节点内存弹性调整,后台会检测当前节点内存的使用状态,弹性调整计算内存大小,缓解20G计算内存上限的问题。但是Query还是报错,建议优化SQL或者扩容。

P1

报错: ERROR: Query could not generate plan by Hologres : Query Translation: No attribute entry found due to incorrect normalization of query

执行的sql中,选中的列不在 GROUP BY 子句里面,但主键是 GROUP BY 子句的子集,Query无法生成计划,从而导致报错。

出现版本:

1.1.23及以下版本。

修复版本:

1.1.24及以上版本。

建议升级到新版本。

P1

使用Flink或者Holo Client,往Binlog表里一次写入多条重复的数据,中间数据的Binlog丢失。

写Binlog表,其中有重复的数据时,后端执行器会只生成最后一条数据的Binlog,其他重复的数据会被忽略。

出现版本:

1.1.23及以下版本。

修复版本:

1.1.24及以上版本。

建议升级到新版本。

P0

查询MaxCompute外部表时,最后两行数据会随机变化,数据类型是DECIMAL类型。

直读MaxCompute的ORC格式数据,当文件中存在DECIMAL类型,存储优化时,Hologres读出来的DECIMAL统计信息存在随机问题。

出现版本:

1.1.23及以下版本。

修复版本:

1.1.24及以上版本。

建议升级到新版本。

P1

报错: Remote seek with parameters are not supported

sort 算子默认具有 rewindable 属性,但底层并不支持,Query生成计划时报错。

出现版本:

1.1.23及以下版本。

修复版本:

1.1.24及以上版本。

建议升级到新版本。

P1

在HologresV1.1版本设置了资源组,但是在跑Query时OOM(Out Of Memory),出现报错: used by all existing queries exceeded memory limitation ,即使不跑任何Query,查询慢SQL和活跃Query这些也报错OOM。

QE内存使用超过阈值,跑新Query超过资源组配额,异常时会导致内存泄漏。

出现版本:

1.1至1.1.23版本。

修复版本:

1.1.24及以上版本。

  • 重新新建资源组。

  • 建议升级到新版本。

P2

偶发报错: fail to setremoteost invalid remon ip

后台进程在检查IP白名单的变量时,变量没有初始化导致偶发报错。

出现版本:

1.1.23及以下版本。

修复版本:

1.1.24及以上版本。

  • 请重试几次。

  • 建议升级到新版本。

P1

对表执行 Analyze 或者 auto analyze 时,当表中存在同名但是大小写不同的列名时,报错: CheckSchema failed

Frontend节点在从优化以后的树结构里面转化成PowerBuilderTree的时候对应列的序号找错,导致报错。

出现版本:

1.1.22及以下版本。

修复版本:

1.1.23及以上版本。

建议升级到新版本。

P1

执行多表 RightOuterJoin 的SQL时,不带有 limit 子句查询结果仅一条,加上 limit 子句之后会出现多条重复的数据。

实现 RightOuterJoin 的时候,在优化器中生成了错误的计划,导致最终结果数据重复。

出现版本:

1.1.22及以下版本。

修复版本:

1.1.23及以上版本。

建议升级到新版本。

P1

case when 语句中,TEXT字段同时作为 group by agg 的参数时,无法生成计划,出现报错: ERROR: Query could not generate plan by Hologres : PlStmt Translation: Attribute number 46046320 not found in project list

case when 中取法找到 agg 参数字段的 colref 导致计划无法生成。

出现版本:

1.1.22及以下版本。

修复版本:

1.1.23及以上版本。

建议升级到新版本。

P1

报错: ERROR: internal error: Writting column: item_emb with array size: 682790219 violates fixed size list (32) constraint declared in schema

const 数组优化机制在SE没有判断导致执行出错。

出现版本:

1.1至1.1.21版本。

修复版本:

1.1.22及以上版本。

建议升级到新版本。

P0

使用 insert on conflict do update set 语句时,语句的subquery中将多行值赋给一行,例如 SET(mes1, mes2) = (SELECT mes1, mes2 FROM insert_on_conflict_do_update_negative_source) 导致实例重启。

subquery中将多行值赋给一行的语法产生了多表达式参数,此参数没有进行转换支持 column id 信息不存在,导致实例重启。

出现版本:

1.1.21及以下版本。

修复版本:

1.1.22及以上版本。

建议升级到新版本。

P2

对于DECIMAL数据相乘报错: code: kActorInvokeError msg: "HGERR_code 22003 HGERR_msge numeric field overflow HGERR_detl A field with precision 38, scale 36 must round to an absolute value less than 10^2. HGERR_ctxt HGERR_erno 2 HGERR_end" err_data { filename: "FunctionsCast.cc" lineno: 323 funcname: "DecimalOverflowCheck" sqlerrcode: 50331778 message: "numeric field overflow" detail: "A field with precision 38, scale 36 must round to an absolute value less than 10^2." context: "

对于DECIMAL类型的字段进行相乘,例如: numeric(38, 18) 乘以 numeric(38, 18) 会得到n umeric(38, 36) ,小数点保存太多位数导致溢出,从而报错。

出现版本:

1.1.21及以下版本。

修复版本:

1.1.22及以上版本。

  • 使用 round 函数进行绕过。

  • 建议升级到新版本。

2021年9-10月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P0

报错: "database is not accepting commands to avoid wraparound data loss in database ""template0""

后台会给Query设置自增 transation id ,对于QPS高的实例,ID会超过INT上界,从而导致报错。

出现版本:

0.10.19至0.10.42版本。

修复版本:

1.1及以上版本。

建议升级到新版本。

P1

数据局部列更新入表偶发报错: internal error: Record batch has 519 rows but length of columns is 7407

字段中包含TEXT[],当前TEXT[]没有进行二层数组的 slice() ,导致其长度不正确,在执行 revserve() 命令时取到了-1导致超过容量。

出现版本:

0.10.41。

修复版本:

0.10.42及以上版本。

  • 通过 set hg_experimental_skip_mem_table=on 命令暂时绕过。

  • 建议升级到新版本。

P1

使用 hg_create_table_like 创建行存表,对行存表插入数据时报错: ERROR: internal error: Cannot find index full ID: 51539607554 (table id: 12, index id: 2) in storages or it is deleting!

行存表中有多个主键,获取表主键的时候是需要执行多次 hg_create_table_like ,将主键的列取出来放到Set集合里面,导致顺序丢失。

出现版本:

0.10.42。

修复版本:

0.10.45及以上版本。

  • 手动执行 create 语句创建行存表。

  • 建议升级到新版本。

P2

删除分区时报错: FAILED: ERROR: query id[27xxxxxxxxxxxxxx37] SE object lock failed

删除分区时,Query被后端异常退出,导致报错。

出现版本:

0.10.41及以下版本。

修复版本:

0.10.42及以上版本。

  • 不对该表进行操作。

  • 联系值班重启实例。

  • 建议升级到新版本。

P2

查询或者写入数据时报错: ERROR: internal error: Invalid table id : 641 MDTableGroup

一般是因为刚做完DDL,后端节点还在重启,这个时候执行DML,就会导致节点间的版本不一致而报错。

出现版本:

1.1.18及以下版本。

修复版本:

1.1.19及以上版本。

  • 等待一段时间重试。

  • 建议升级到新版本。

2021年08月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P1

表开启Hologres Binlog,且建表时Binlog的TTL设置比较小的时间,但表的存储数据一直增长(业务数据量并没有增加)。

建表(create table)时,显式指定的Binlog TTL未真正生效,默认为100年。

出现版本:

0.10版本。

修复版本:

1.1版本。

  • 需要重新手动更改表Binlog TTL为较小的值,执行 call set_table_property('schema.table', 'binlog.ttl', '86400');

  • 建议升级到V1.1版本。

P1

列存表频繁进行Update、Delete、Insert on Conflict操作,引起存储空间持续增长。

Hologres为提高更高的效率,采用标记删除算法,当文件中被标记记录达到一定比率,会触发后台Compaction进程,进行空间的释放。Hologres存在缺陷,在某些情况下Compaction未启动。

出现版本:

0.10.25以下版本。

修复版本:

0.10.25及以上版本。

建议升级到最新版本。

P1

当表正在实时写入(通过Flink、数据集成等方式)时,同时查询数据报错: ERROR: internal error: Record batch has 742 rows but length of columns is 749. columns=[ColumnHandle(type=string)(table_column_id=3), ColumnHandle(type=string)(table_column_id=4), ColumnHandle(type=string)(table_column_id=5)]

实时写入时,数据是先写入MemTable再落到磁盘,在写入期间去查询,查询列标记长度和真实数据长度未对齐,导致查询失败报错。

出现版本:

0.10.41版本。

修复版本:

0.10.42及以上版本。

建议升级到最新版本。

P1

业务没有增加,内存突然增长。

SQL中有如下函数,会出现内存泄漏,导致内存突然增长。

  • extract(xxx from time)

  • extract(xxx from interval)

  • date_part(xx, interval)

出现版本:

0.10.31以下版本。

修复版本:

0.10.32及以上版本。

  • 不使用列表中的函数。

  • 建议升级到最新版本。

P2

提示报错: time before epoch time not supported

SQL中使用了 to_char to_date to_timestamp 这些函数的其中一个或多个,且数据有1970年之前的数据,Hologres不支持1970年之前的数据。

出现版本:

0.10及以下版本。

修复版本:

1.1版本。

  • 过滤1970年之前的数据。

  • 建议升级到最新版本,可支持1925-2282年的数据。

P2

非Superuser执行 select hg_dump_script('xxxx') 函数时报错: ERROR: permission denied for table pg_subscription

hg_dump_script 间接调用了 pg_subscription 这个relation,但是 pg_subscription 里面可能会存在敏感信息,默认只有Superuser才可以访问这个表。

出现版本:

0.10版本。

修复版本:

1.1版本。

  • pg_subscription 并未实际存储对于 hg_dump_script 有用的信息,已修改该默认行为,在V1.1版本解决。

  • 遇到没有权限问题,可以给当前用户授予 pg_subscription 的访问权限

P2

SQL中含有 left join ,不带有 limit 子句查询结果仅一条,加上limit之后会出现多条重复的数据。

left join 在底层会转换成 right outer join ,引擎在实现 right outer join 的时候,生成的right side走broadcast的错误执行计划,导致最终结果数据重复,可以通过执行 explain sql 查看执行计划是否走broadcast。

出现版本:

0.10.40及以下版本。

修复版本:

1.1版本。

建议升级到最新版本。

P2

往Binlog表里一次写入多条重复的数据时,中间数据的Binlog会丢失,未保留所有Binlog中间状态变化。

重复数据会被引擎去重,默认保留最后一条,导致中间状态变化丢失。

出现版本:

0.10.30及以下版本。

修复版本:

0.10.39及以上版本。

建议升级到最新版本。

P2

提示报错: ERROR: status { code: SERVER_INTERNAL_ERROR message: " HGERR_code 00000 HGERR_msge OptimizedRegularExpression: cannot compile re2: \\c, error: invalid escape sequence: \\c4 HGERR_end[query_id:xx" err_data { message: "OptimizedRegularExpression: cannot compile re2: \\c, error: invalid escape sequence: \\c4" context: "[query_id:xxx]" } }CONTEXT: [query_id:xx]

SQL中的like有\ + 字符或数字的情况,示例SQL如下。

select * from test_tb where a like '%\c%';select * from test_tb where a like '%F\G%';

目前引擎对于SQL中的like有\ + 字符或数字的情况处理不够完善,导致报错。

出现版本:

0.10.38及以下版本。

修复版本:

0.10.39及以上版本。

建议升级到最新版本。

P2

行存表根据主键查询时,结果不一致或者报错: Duplicate keys detected when building hash table

建行存表时,主键和Clustering Key的顺序指定不一致,如

create table k ( a int, b int, primary key(a, b));
call set_table_property('k', 'orientation', 'row');
call set_table_property('k', 'clustering_key', 'b,a');

出现版本:

0.10.37及以下版本。

修复版本:

0.10.38及以上版本。

  • 重新建表,将主键和Clustering Key的顺序保持一致。

  • 建议升级到新版本。

P2

在新建的schema下使用数据脱敏,查询脱敏数据时报错: hg_anon_mask_name(text) doesnt exist

数据脱敏函数被创建在public schema下,导致在新schema下无法查询脱敏数据。

出现版本:

0.10.35及以下版本。

修复版本:

0.10.36及以上版本。

  • 只在public schema下使用数据脱敏函数。

  • 建议升级到新版本。

P2

报错: internal error:string decimal literal can not be tentative

SQL语句里 in 中包含不同精度的decimal数据,示例SQL如下。

select * from table where sval in(170344.964,1339107.84);

出现版本:

0.10.34及以下版本。

修复版本:

0.10.35及以上版本。

  • 修改SQL语句里 in 中包含的decimal数据精度一致。

  • 建议升级到最新版本。

2021年07月

等级

报错/问题描述

缺陷原因

出现/修复版本

规避建议

P0

RoaringBitmap字段被配置为字典编码(Dictionary Encoding)时,造成写入失败,实例不可查询。

RoaringBitmap类型并不支持字典编码,强行设置造成编码逻辑故障,导致写入一直失败。

出现版本:

0.10.24及以下版本。

修复版本:

0.10.25及以上版本。

  • RoaringBitmap字段取消Dictionary Encoding。

  • 建议升级到新版本。

P0

在非 public schema 执行 add commect on tablename is "is comment" 导致写入或查询卡住。

在非 public schema 下执行 add comment 操作: add comment on tablename is "comment" ,SQL语句中未指定Schema名,导致单个节点异常,从而导致出现写入/查询卡住现象。

出现版本:

0.10.20及以下版本。

修复版本:

0.10.21及以上版本。

  • SQL中 add comment 时加上Schema名: add comment on schema.tablename is "comment"

  • 建议升级到新版本。

P0

报错: cannot acquire lock in time

在原有的版本中,会对DDL加锁,高并发查询和删除(Drop)同一张表时,后端节点出现死锁,导致有关这张表的操作都卡住,从而报错

出现版本:

0.9.22及以下版本。

修复版本:

0.9.23及以上版本。

建议升级到新版本。

P1

在数据没有写入时,存储空间持续线性增长。

使用 insert on conflict do update set pk =pk 语句导入数据,实际上导入前和导入后数据并没有实际变化,触发底层优化BUG,导致存储线性增长。

出现版本:

0.10.23及以下版本。

修复版本:

0.10.24及以上版本。

  • 可以通过执行 insert into values 语句,触发数据更新,多余的数据将会被删除。

  • 建议升级到新版本。

P1

在执行 extract XXX from timestamptz/timestamp 时,提示报错: time before epoch time not supported

EXTRACT函数在处理数据中的NULL值会有误。

出现版本:

0.10.20及以下版本。

修复版本:

0.10.21及以上版本。

  • SQL通过过滤条件过滤掉NULL。

  • 建议升级到新版本。

P1

报错: cant determine shard id of shard value

SQL语句中有 union all 语句,并且Group by字段中有 distrubition key ,导致执行计划错误,从而导致找不到对应的 Shard

出现版本:

0.10.20及以下版本。

修复版本:

0.10.21及以上版本。

建议升级到新版本。

P1

ERROR: Query could not generate plan by gporca : Group by key is type of unsupported type. not supported

Group by的字段类型是非精确类型,导致出现报错。

出现版本:

0.9及以下版本。

修复版本:

0.10已开发限制。

  • Group by中避免非精确数据类型。

  • 建议升级到新版本。

P1

读外表时报错: unsupported column type:list

在MaxCompute已有表中新增一列 array column 且该列不导入数据,外表查询该MaxCompute时报错

出现版本:

0.9.22及以下版本。

修复版本:

0.9.23及以上版本。

  • MaxCompute新增一列 array column 后,及时为该列写入数据。

  • 建议升级到新版本。

P1

报错 ERROR: internal error: The left child should be column ref, num_children: 1

查询的SQL中,Clustering key为 varchar 类型就会触发。

出现版本:

0.9.24及以下版本。

修复版本:

0.9.25及以上版本。

  • varchar 字段改成TEXT字段。

  • 建议升级到新版本。

P2

查询外表报错: code: SERVER_INTERNAL_ERROR message: "query next from foreign table executor failed,Unknown file type: xxx

MaxCompute集群发生配置更新,同时Hologres依赖的外表元数据未及时更新导致。

出现版本:

0.10.20及以下版本。

修复版本:

0.10.21及以上版本。

无法规避,需要实例重启或者升级到新版本。