2012-01-05 4 views
0

PostgreSQL (v8.4) 용 C 함수 확장 라이브러리가 있습니다. 라이브러리는 다음과 같은 서명을 가진 함수 foo()가 포함되어 나는 PostgreSQL의 DB의 특정 테이블의 컬럼 데이터를 전달하려는배열을 C 함수에 전달하는 PostgreSQL의 집계 함수

double foo(const double* values, const size_t len); 

을 (V 8.4) C 함수에,에 "집합"기능을 사용하여 agg().

직원 테이블의 다음 열 (id, name, salary)을 사용하여 db에 employees 테이블을 사용한다고 가정합니다.

내 C 함수에 모든 급여의 배열을 float8 []로 전달하고 싶습니다. 즉, C 함수에 전달할 데이터는 입력 할 때 콘솔에 출력되는 데이터입니다. select 직원

에서 급여가 나는 array_agg() 함수를 발견하고 내가 좋아하는 성명을 실행할 수 있도록 내가 (어댑터를 통해) 내 C 함수에 float8 []를 반환하는 데 사용할 수 있다고 생각 :

select foo(array_agg(salary)) from employees; 

그러나 이것을 시도 할 때 잘못된 결과가 나타났습니다.

그런 다음 직원의 SELECT array_agg (임금)를 실행하고 간단한 숫자 배열 대신 빈 줄이 많은 콘솔에 인쇄되었음을 알게되었습니다. 전체 숫자가 " 하나의 배열로 인쇄물의 끝을 향해. 말할 필요도없이, 테이블의 데이터 (급여 열)는 NULL 값을 허용하지 않으므로 array_agg()가 화면으로 돌아 오는 것을 이해하지 못합니다.

내가 찾고자하는 것은 "tablename에서 [columnname]을 선택하십시오"와 같은 데이터를 플로트 배열로 반환하는 함수 (집계 또는 기타)를 만드는 방법입니다.

저는 온라인과 포스트그레스 문서 검색에 대부분의 시간을 보냈습니다. 아직 사용자 정의 집계 함수를 만드는 유용한 예제 나이 문제를 해결하는 데 도움이되는 원격 유용성을 찾지 못했습니다.

(테이블 또는 쿼리의) 열에 값을 반환하는 함수를 작성해 주셔서 감사 드리며 그 값을 C 함수에 전달합니다.

+1

['array_agg()'] (http://www.postgresql.org/docs/current/interactive/functions-aggregate.html)는 찾고있는 것과 정확히 일치합니다. 오해가 있어야합니다. 귀하의 사례는 결정적이지 않습니다. –

답변

1

먼저 C UDF 집계 함수가 필요하거나 배열로 선택해야하는지 잘 모르겠습니까? 왜 선택 총액 (급여), ... 작동하지?

배열에 select 함수를 포함 할 때마다 기억하십시오. PostgreSQL은 각 배열에 대해 순차적 테이블 스캔을 수행합니다.

관련 문제