У меня есть библиотека расширения функций C для PostgreSQL (v8.4). Библиотека содержит функцию foo () со следующей подписью:
double foo(const double* values, const size_t len);
Я хочу передать столбчатые данные для конкретной таблицы в postgresql db (v 8.4) в функцию C, используя функцию агрегирования agg ().
Предполагается, что я использую таблицу сотрудников в моей базе данных со следующими столбцами в таблице сотрудников: идентификатор, имя, зарплата.
Я хочу передать массив всех зарплат как float8 [] в мою функцию C - то есть данные, которые я хочу передать в функцию C, - это те данные, которые выводятся на консоль, когда я набираю
выберите зарплату у сотрудников
Я обнаружил функцию array_agg () и подумал, что мог бы использовать ее для возврата float8 [] в мою функцию C (через адаптер), чтобы я мог выполнить инструкцию вроде:
select foo(array_agg(salary)) from employees;
однако, когда я попробовал это, я понял, что получаю неправильные результаты.
Затем я запустил SELECT array_agg (wages) от сотрудников и был удивлен, обнаружив, что вместо простого массива чисел на консоль было выведено множество пустых строк - вместе с тем, во что «сжалась» целая куча чисел один массив к концу распечатки. Нет необходимости говорить, что данные в таблице (столбец зарплаты) не принимают значения NULL, поэтому я не понимаю, что array_agg () возвращает на экран.
То, что мне нужно найти, - это способ создания функции (агрегатной или другой), которая возвращает
данные, эквивалентные «select [columnname] from tablename» в качестве массива с плавающей точкой.
Я провел большую часть дня в Интернете, просматривая документацию postgres, и пока не нашел полезного примера создания пользовательских агрегатных функций или чего-либо удаленно полезного для решения этой проблемы.
Буду признателен за любую помощь в написании функции, которая возвращает значения в столбце (таблицы или запроса), чтобы я передал эти значения в функцию C.