PostgreSQL string_to_array group by 两个列报错

来源:这里教程网 时间:2026-03-14 20:42:29 作者:

现象是这样的,生产环境和测试环境数据相同,执行相同的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)

相关推荐