现象是这样的,生产环境和测试环境数据相同,执行相同的SQL,生产报错,测试环境没有报错,原因其实是表结构不用,生产环境没有主键,模拟复现如下:生产环境
create table test(id int,name varchar(100));
insert into test values (1,'a,b');
insert into test values (2,'c,d,e');
select
id,
(string_to_array(name, ',')) as name1
from
test e
group by id;
oss_ods@oss_ods-> group by id;
ERROR: column "e.name" must appear in the GROUP BY clause or be used in an aggregate function
LINE 3: (string_to_array(name, ',')) as name1
oss_ods@oss_ods=> select
oss_ods@oss_ods-> id,
oss_ods@oss_ods-> (string_to_array(name, ',')) as name1
oss_ods@oss_ods-> from
oss_ods@oss_ods-> test e
oss_ods@oss_ods-> group by id,name;
id | name1
----+---------
1 | {a,b}
2 | {c,d,e}
(2 rows)
测试环境
drop table test;
create table test(id int,name varchar(100),constraint test_pk primary key(id));
insert into test values (1,'a,b');
insert into test values (2,'c,d,e');
oss_ods@oss_ods=> select
oss_ods@oss_ods-> id,
oss_ods@oss_ods-> (string_to_array(name, ',')) as name1
oss_ods@oss_ods-> from
oss_ods@oss_ods-> test e
oss_ods@oss_ods-> group by id,name;
id | name1
----+---------
1 | {a,b}
2 | {c,d,e}
(2 rows)
oss_ods@oss_ods=>
oss_ods@oss_ods=> select
oss_ods@oss_ods-> id,
oss_ods@oss_ods-> (string_to_array(name, ',')) as name1
oss_ods@oss_ods-> from
oss_ods@oss_ods-> test e
oss_ods@oss_ods-> group by id;
id | name1
----+---------
2 | {c,d,e}
1 | {a,b}
(2 rows)
