array_agg具有不同的作用在postgres 9.4但不在postgres 9.6

时间:2017-04-20 15:46:37

标签: postgresql postgresql-9.4 postgresql-9.6 array-agg

我有一个查询,它使用带有distinct作为参数的array_agg,并且在postgres 9.6上不被接受。

我创建了这个示例来说明问题:

create table numbers (id integer primary key, name varchar(10));
insert into numbers values(1,'one');
insert into numbers values(2,'two');
postgres 9.4

select array_agg(distinct(id)) from numbers;
 array_agg 
-----------
 {1,2}
postgres 9.6

ERROR:  function array_agg(integer) is not unique
LINE 1: select array_agg(distinct(id)) from numbers;
               ^
HINT:  Could not choose a best candidate function. 
You might need to add explicit type casts.

为了在postgres 9.6上获得此结果,我需要更改什么?

感谢。

这是我检查功能的原因:

nspname | proname | proargtypes 
------------+-----------+--------------------- 
pg_catalog | array_agg | [0:0]={anyarray} 
public | array_agg | [0:0]={anyelement} 
pg_catalog | array_agg | [0:0]={anynonarray

现在,由于pozs的评论,我发现了这个问题。我删除了聚合函数的公共定义,并且它有效。

问题出在我正在处理的数据库上,因为我发现有些人说样本为他们工作我创建了一个新的数据库运行示例。然后唯一的变化是聚合函数定义。

2 个答案:

答案 0 :(得分:4)

现在,由于pozs的评论,我发现了这个问题。我删除了聚合函数的公共定义,并且它有效。

问题出在我正在处理的数据库上,因为我发现有些人说样本为他们工作我创建了一个新的数据库运行示例。然后唯一的变化是聚合函数定义。

所以我放弃了函数public | array_agg | [0:0] = {anyelement}并且有效。

非常感谢。

答案 1 :(得分:0)