array_agg с отдельными работами в postgres 9.4, но не в postgres 9.6
У меня есть запрос, который использует 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 ответа
Теперь я нашел проблему благодаря комментарию pozs. Я удалил публичное определение агрегированной функции, и это сработало.
Проблема была только в базе данных, над которой я работал, поскольку я обнаружил, что некоторые люди говорят, что образец работает для них, я создал новую базу данных для запуска примера. И тогда единственным изменением стали определения агрегатных функций.
Так что я опускаю функцию public | array_agg | [0:0]={любой элемент}, и это сработало.
Большое спасибо.
Он работает точно так же, как это продемонстрировано в dbfiddle на PostgreSQL 9.6.2 на x86_64-pc-linux-gnu, скомпилированной gcc (Debian 4.9.2-10) 4.9.2, 64-bit.