저는 PostgreSQL 9.2.1을 실행 중이며 3 열을 반환하는 plpgsql 함수가 있습니다. 다음과 같이 호출되었습니다.여러 열을 반환하는 plpgsql 함수가 여러 번 호출됩니다.
SELECT (my_function(b.input)).*, a.other, b.columns
FROM table_a a
JOIN table_b b ON a.id = b.id
WHERE ...
이 함수는 WARNING 메시지를 출력하고 3 번 인쇄 된 것을보고 놀랐습니다. 함수가 3 번 호출되는 것처럼 보입니다 - 아마도 각 열에 대해 한 번. 이것은 성능에 좋을 수 없습니다! 한 번만 호출되도록하려면 어떻게해야합니까? 이미 STABLE로 표시되어 있습니다. 나는 그 경고를 한 번만 인쇄
SELECT * FROM my_function(input)
로 부르지 만, 나는 내가 조인 및 기타 열을 반환에 더 큰 쿼리에 그것을 통합 할 수있는 방법을 모르는 경우
. 즉, FROM 목록에 다른 테이블이 필요할 때 함수를 FROM 목록에 넣는 방법을 모르며 그 함수는 그 테이블의 입력을 가져옵니다.
편집 :
(원래 훨씬 더 가까이) 조회 :
SELECT (my_aggregate_function(sub1.border, sub1.lower_limit, sub1.upper_limit, operation)).*
FROM
(
SELECT (my_function(ca.timeslice_id)).*, agc.operation
FROM geometry_component agc
JOIN volume av ON agc.volume_id = av.id
JOIN volume_dependency avd ON av.contributor_id = avd.id
JOIN my_rowset_function('2013-02-22') ca ON avd.id = ca.feature_id
WHERE agc.timeslice_id = 12345
ORDER BY agc.sequence
) sub1
my_aggregate_function
및 my_function
은 각각 3 열 (테두리, lower_limit, UPPER_LIMIT)을 반환하지만, my_aggregate_function
집계이며, my_function
은 일반적인 기능입니다.
밀접하게 관련 질문 : http://stackoverflow.com/questions/14965708/insert-using-a-function-that-returns-two-values- 행당. 쿼리를 제공하십시오, 하위 쿼리를 구현할 수 있어야합니다. –
링크를 제공해 주셔서 감사합니다. 그러나 그 점을 이해하지 못했습니다. 쿼리를 추가했습니다. – EM0