我有一个使用带有distinct的数组agg作为参数的查询,在Postgres9.6上不被接受。
我创建这个示例是为了说明这个问题:

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

博士后9.4
select array_agg(distinct(id)) from numbers;
 array_agg
-----------
 {1,2}

博士后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.

为了在Postgres9.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的评论,我发现了这个问题。我删除了聚合函数的公共定义,它起了作用。
问题就在我正在处理的数据库上,因为我发现有些人说这个示例对他们有用,于是我创建了一个新数据库并运行这个示例。唯一的变化是聚合函数定义。

最佳答案

现在,我发现这个问题多亏了波茨的评论。我删除了聚合函数的公共定义,它起了作用。
问题就在我正在处理的数据库上,因为我发现有些人说这个示例对他们有用,于是我创建了一个新数据库并运行这个示例。唯一的变化是聚合函数定义。
所以我去掉了public | array |[0:0]={anyelement}函数,它就工作了。
谢谢。

关于postgresql - array_agg在postgres 9.4中具有独特的功能,但在postgres 9.6中不具有,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43524258/

10-10 06:34