집 >데이터 베이스 >MySQL 튜토리얼 >PostgreSQL에서 배열 인수를 사용하여 집합 반환 함수를 여러 번 효율적으로 호출하려면 어떻게 해야 합니까?
배열 인수를 사용하여 집합 반환 함수를 여러 번 호출
이 논의는 처리할 수 있는 foo라는 집합 반환 함수를 중심으로 합니다. 특정 매개변수를 활용하는 데이터 배열이며 일련의 행과 추가 열을 포함하는 결과를 제공합니다. 함수가 단일 데이터 세트로 성공적으로 작동하지만 참조를 위해 데이터 ID에 의존하지 않고 여러 데이터 세트를 처리하려고 시도할 때 문제가 발생합니다.
다음 형식을 활용하는 등 구문을 수정하려는 다양한 시도:
SELECT dataid, (foo(ARRAY_AGG(data)),1).* FROM dataset WHERE dataid = something -- only testing on 1 GROUP BY dataid
실패하여 각 열에 대해 함수가 반복적으로 호출되었습니다.
해결책: 측면 조인
PostgreSQL 버전 9.3 이상에서는 LEFT JOIN LATERAL 구문을 사용하면 일반적으로 최적의 결과를 얻을 수 있습니다.
SELECT sub.dataid, f.* FROM ( SELECT dataid, array_agg(data) AS arr FROM dataset WHERE dataid = something GROUP BY 1 ) sub LEFT JOIN LATERAL foo(sub.arr) f ON true;
이 구문은 모든 행이 foo 함수가 행을 반환하지 않더라도 조인 왼쪽의 값은 유지됩니다.
If foo는 실제로 행을 반환할 수 없으며 해당 행을 제외하는 것이 바람직합니다. 다음 구문을 사용할 수 있습니다:
CROSS JOIN LATERAL foo(sub.arr)
또는 약식 버전:
, foo(sub.arr)
이 접근 방식은 PostgreSQL에 문서화되어 있습니다. 매뉴얼.
위 내용은 PostgreSQL에서 배열 인수를 사용하여 집합 반환 함수를 여러 번 효율적으로 호출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!