0
В поисках агрегатной функции, которая возвращает п-й элемент коллекции я нашел следующее решение:Создание агрегатной функции не удается
CREATE OR REPLACE FUNCTION _final_nth(anyarray, integer)
RETURNS anyelement AS
$BODY$
SELECT a
FROM unnest($1) a
ORDER BY a
offset $2
LIMIT 1;
$BODY$
LANGUAGE 'sql' IMMUTABLE;
CREATE AGGREGATE nth(anyelement, integer) (
SFUNC=array_append,
STYPE=anyarray,
FINALFUNC=_final_nth,
INITCOND='{}'
);
Создание функции отлично работает, но выполнение CREATE Совокупные производит следующее сообщение об ошибке:
ERROR: function array_append(anyarray, anyelement, integer) does not exist
Я не могу устранить эту ошибку.
Я не могу сделать головы или хвосты этого вопроса. Вы говорите, что хотите n-й элемент коллекции, но что такое «коллекция» в PG? Если «коллекция» - это набор результатов, что не так с прямым «OFFSET' /' LIMIT », и если это массив, что не так с прямым« myarray [n] »? Зачем вам нужен агрегат? Кроме того, ошибка выглядит довольно очевидной для меня. PostgreSQL пытается передать текущее состояние плюс аргументы агрегата в 'SFUNC', и нет никакого массива' array_append', который принимает эти аргументы (и не имеет никакого смысла для этого). – jpmc26