PostgreSQL의 SELECT 문에서 여러 집합 반환 함수 처리: 버전별 분석
SELECT
문 내에서 여러 집합 반환 함수를 만날 때 PostgreSQL의 동작은 데이터베이스 버전에 따라 크게 다릅니다.
PostgreSQL 10 이상:
버전 10 이상에서는 이러한 함수가 동기적으로 실행됩니다. 출력은 가장 많은 행을 생성하는 함수가 결과 집합의 총 행 수를 지정하도록 구성됩니다. 더 짧은 함수 출력은 NULL
값으로 채워져 이 정렬을 유지하고 효과적으로 교차 조인과 같은 결과를 생성합니다.
PostgreSQL 9.6 이하:
9.6 버전 이전에는 결과가 크게 다릅니다. 생성된 총 행 수는 각 집합 반환 함수의 행 수에 대한 최소 공배수(LCM)와 같습니다. 이는 특히 행 개수가 공통 요소를 공유하지 않는 경우 예측 불가능하고 잠재적으로 바람직하지 않은 결과를 초래할 수 있습니다.
예시:
쿼리를 살펴보겠습니다.
<code class="language-sql">SELECT generate_series(1, 3), generate_series(5, 7);</code>
PostgreSQL 10 출력:
<code> generate_series | generate_series -----------------+----------------- 1 | 5 2 | 6 3 | 7 NULL | NULL NULL | NULL NULL | NULL</code>
PostgreSQL 9.6- 출력:
<code> generate_series | generate_series -----------------+----------------- 1 | 5 2 | 6 3 | 7 1 | 5 2 | 6 3 | 7 1 | 5 2 | 6 3 | 7</code>
주요 고려 사항:
CASE
및 COALESCE
표현식 내에서 집합 반환 함수의 사용을 금지합니다.LATERAL JOIN
목록에 여러 집합 반환 함수를 직접 포함하는 대신 ROWS FROM (...)
과 함께 SELECT
을 사용하는 것이 좋습니다.관련 문서:
위 내용은 여러 버전에 걸쳐 PostgreSQL의 SELECT 절에서 여러 집합 반환 함수가 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!