У меня есть расширение функции lib lib для PostgreSQL (v8.4). Библиотека содержит функции Foo() со следующей подписью:Агрегатная функция в PostgreSQL для передачи массива функции C
double foo(const double* values, const size_t len);
Я хочу передать столбчатых данные для конкретной таблицы в PostGreSQL дб (v 8.4) для функции C, с помощью «совокупной» функции AGG().
Предполагая, что я использую таблицу сотрудников в своем db, со следующими столбцами в таблице сотрудников: id, name, pay.
Я хочу, чтобы передать массив всех зарплат как float8 [] к моей функции C - то есть данные, которые я хочу, чтобы перейти к функции C является то, что выводится на консоль, когда я печатаю выбери зарплата от сотрудников
я обнаружил функцию array_agg() и подумал, что я мог бы использовать его, чтобы вернуть float8 [] для моей функции C (через адаптер), так что я мог бы выполнить такое заявление:
select foo(array_agg(salary)) from employees;
Однако, когда я попробовал это, я понял, что получаю неправильные результаты.
Затем я запускал SELECT array_agg (зарплаты) у сотрудников и был удивлен, обнаружив, что вместо простого массива чисел на консоль было напечатано много пустых строк - вместе с тем, что целая куча чисел «сжимала», в один массив к концу распечатки. Излишне говорить, что данные в таблице (столбец зарплаты) не принимают значения NULL, поэтому я не понимаю, что возвращает array_agg() на экран.
Что мне нужно найти, это способ создания функции (агрегата или иначе), которая возвращает данных, эквивалентных «select [columnname] from tablename» как массив поплавков.
Я потратил большую часть дня на поиск в Интернете и документацию postgres, и я еще не нашел полезного примера создания пользовательских агрегатных функций или чего-нибудь полезного для решения этой проблемы.
Я был бы признателен за любую помощь в написании функции, которая возвращает значения в столбце (таблицы или запроса), чтобы передать эти значения функции C.
['array_agg()'] (http://www.postgresql.org/docs/current/interactive/functions-aggregate.html) делает именно то, что вы ищете. Должно быть, недоразумение. Ваши примеры неубедительны. –