Полный вопрос переписать
Я ищу агрегатную функцию First ().
Здесь я нашел то, что почти работает:
CREATE OR REPLACE FUNCTION public.first_agg ( anyelement, anyelement )
RETURNS anyelement LANGUAGE sql IMMUTABLE STRICT AS $$
SELECT $1;
$$;
-- And then wrap an aggregate around it
CREATE AGGREGATE public.first (
sfunc = public.first_agg,
basetype = anyelement,
stype = anyelement
);
Проблема в том, что когда столбец varchar (n) проходит через функцию first (), он преобразуется в простой varchar (без размера). Пытаясь вернуть запрос в функции как RETURNS SETOF anyelement, я получаю следующую ошибку:
ОШИБКА: структура запроса не соответствует типу результата функции. Estado de SQL: 42804 Подробная информация: Изменение символа возвращаемого типа не соответствует ожидаемому изменению символа типа (40) в столбце 2. Контекст: функция PL / pgSQL vsr_table_at_time (anyelement, отметка времени без часового пояса) ) строка 31 в RETURN QUERY
На той же вики-странице есть ссылка на C-версию функции , которая заменит вышеперечисленное. Я не знаю, как его установить, но мне интересно, сможет ли эта версия решить мою проблему.
Между тем, есть ли способ изменить вышеуказанную функцию, чтобы она возвращала точно такой же тип входного столбца?
DISTINCT ON
в этом случае работать не будет. Это не агрегатная функция, вы на самом деле фильтруете данные и можете сделать это только один раз.