>데이터 베이스 >MySQL 튜토리얼 >PostgreSQL에서 배열 인수를 사용하여 집합 반환 함수를 여러 번 효율적으로 호출하려면 어떻게 해야 합니까?

PostgreSQL에서 배열 인수를 사용하여 집합 반환 함수를 여러 번 효율적으로 호출하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-26 12:32:10893검색

How Can I Efficiently Call a Set-Returning Function with an Array Argument Multiple Times in 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.