PostgreSQL에서는 집합 반환 함수를 여러 번 호출해야 하는 상황이 발생할 수 있습니다. , 매번 배열을 인수로 제공합니다. 그러나 단일 배열을 함수에 전달하는 전통적인 방법을 사용할 경우 함수가 여러 번 호출되어 처리가 비효율적일 수 있습니다.
이 문제를 해결하기 위해 PostgreSQL 9.3 이상에서는 LEFT JOIN LATERAL 을 제공합니다. .. ON 참 구문. 이 접근 방식은 다음 단계를 수행하여 실행을 최적화합니다.
이 접근 방식을 설명하려면 다음 예를 고려하십시오.
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;
이 예에서 하위 쿼리는 각 데이터 ID에 대한 데이터 열을 집계하여 배열을 생성합니다. 그런 다음 이 배열은 향상된 데이터 행 집합을 반환하는 foo() 함수에 인수로 전달됩니다.
또는 foo() 함수가 잠재적으로 행을 반환하지 않을 수 있고 모든 행을 보존하려는 경우 조인 왼쪽에서 CROSS JOIN LATERAL 또는 단축 구문을 사용할 수 있습니다.
이 접근 방식을 활용하면 집합 반환 함수를 여러 번 효율적으로 호출할 수 있습니다. 배열 인수를 사용하여 불필요한 함수 호출을 방지합니다.
위 내용은 PostgreSQL에서 배열 인수를 사용하여 집합 반환 함수를 여러 번 효율적으로 호출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!