theexecutor계획을 수여합니다 플래너/최적화기로 돌아와 재귀 적으로 처리합니다 필요한 행 세트를 추출하십시오. 이것은 본질적으로 a입니다 수요 풀 파이프 라인 메커니즘. 계획 노드를 호출 할 때마다 한 줄을 하나 더 전달하거나 완료되었다고보고해야합니다. 줄 전달.
구체적인 예를 제공하려면 상단 노드가 A라고 가정합니다.Mergejoin노드. 병합이있을 수 있습니다 완료된 두 행을 가져와야합니다 (각 하위 플랜에서 하나). 그래서 집행자는 재귀 적으로 스스로를 호출하여 하위 계획을 처리합니다 (IT 첨부 된 하위 플랜으로 시작합니다LeftTree). 새로운 상단 노드 (의 상단 노드 왼쪽 하위 플랜)는 at입니다.sort노드 입력 행을 얻으려면 다시 재귀가 필요합니다. 아이 의 노드SortSeqscan노드, 실제 판독 값을 나타냅니다 테이블. 이 노드의 실행은 집행자가 행을 가져 오게합니다. 테이블에서 호출 노드로 반환합니다. 그만큼sort노드는 반복적으로 자녀를 부릅니다 정렬 할 모든 행을 얻으려면. 입력이 소진 될 때 (자식 노드가 표시 한대로 행),Sort코드는 정렬을 수행합니다. 그리고 마지막으로 첫 번째 출력 행, 즉 먼저 정렬 된 순서. 나머지 행을 저장합니다 나중에 응답하여 정렬 된 순서로 전달할 수 있습니다. 요구.
themergejoin노드와 유사하게 요구됩니다 오른쪽 하위 플랜에서 첫 번째 줄. 그런 다음 두 가지를 비교합니다 그들이 합류 할 수 있는지 확인하는 행; 그렇다면 가입 행을 반환합니다 발신자에게. 다음 통화에서 또는 가입 할 수없는 경우 즉시 현재 입력 한 쌍의 입력은 다음 행으로 진행됩니다. 테이블 또는 다른 사람 (비교가 어떻게 나온 방법에 따라), 그리고 다시 경기를 확인합니다. 결국 하나의 하위 플랜 또는 다른 사람은 지쳐졌고mergejoin노드를 반환하여 더 이상 결합 행이 없음을 나타냅니다. 형성.
복잡한 쿼리는 많은 수준의 계획 노드를 포함 할 수 있지만 일반적인 접근 방식은 동일합니다. 각 노드는 다음과 같습니다. 다음 출력 행이 호출 될 때마다. 각 노드도 있습니다 선택 또는 투영 표현식을 적용 할 책임이 있습니다 플래너에 의해 할당되었습니다.
executor 메커니즘은 4 개의 기본 SQL을 모두 평가하는 데 사용됩니다. 쿼리 유형 :select, 삽입, 업데이트및삭제. 을 위한select, 최고 수준의 집행자 코드 만 있으면됩니다 쿼리 플랜 트리에서 반환 한 각 행을 클라이언트로 보내십시오. 을 위한삽입, 각각의 반환 된 행입니다 에 지정된 대상 테이블에 삽입삽입. (간단한삽입 ... 값명령은 a로 구성된 사소한 계획 트리를 만듭니다 하나의결과노드 하나의 결과 행. 하지만삽입 ... 선택executor 메커니즘의 전체 힘을 요구할 수 있습니다.) for업데이트, 플래너는 각각을 정리합니다 컴퓨팅 행에는 업데이트 된 모든 열 값과에TID(튜플 ID 또는 행 ID)의 원래 대상 행; 집행자 최상위는이 정보를 사용합니다 새 업데이트 행을 생성하고 이전 행을 표시하려면 삭제되었습니다. 을 위한삭제, 실제로 유일한 열입니다 계획에 의해 반환 된 것은 TID이고, 집행자는 최상위입니다. 단순히 TID를 사용하여 각 대상 행을 방문하여 표시합니다. 삭제.