PostgreSQL string_to_array group by 兩個列報錯

哎呀我的天吶發表於2022-10-19

現象是這樣的,生產環境和測試環境資料相同,執行相同的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)



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29990276/viewspace-2919141/,如需轉載,請註明出處,否則將追究法律責任。

相關文章