그집행자플래너/옵티마이저가 생성한 계획을 가져와 재귀적으로 처리하여 필요한 행 집합을 추출합니다. 이는 본질적으로 수요풀 파이프라인 메커니즘입니다. 계획 노드가 호출될 때마다 하나의 행을 더 전달하거나 행 전달이 완료되었음을 보고해야 합니다.
구체적인 예를 제공하기 위해 최상위 노드가 다음과 같다고 가정합니다.MergeJoin노드. 병합을 수행하려면 먼저 두 개의 행을 가져와야 합니다(각 하위 계획에서 하나씩). 따라서 실행자는 하위 계획을 처리하기 위해 자신을 재귀적으로 호출합니다(다음에 연결된 하위 계획으로 시작함).왼쪽나무). 새로운 최상위 노드(왼쪽 하위 계획의 최상위 노드)는 다음과 같습니다.정렬노드이며 입력 행을 얻으려면 다시 재귀가 필요합니다. 의 하위 노드정렬아마도SeqScan노드, 테이블의 실제 읽기를 나타냅니다. 이 노드를 실행하면 실행기가 테이블에서 행을 가져와 호출 노드에 반환합니다.정렬노드는 정렬할 모든 행을 얻기 위해 반복적으로 하위 항목을 호출합니다. 입력이 소진되면(행 대신 NULL을 반환하는 하위 노드에 의해 표시됨),정렬코드는 정렬을 수행하고 마침내 첫 번째 출력 행, 즉 정렬된 순서의 첫 번째 행을 반환할 수 있습니다. 이후 요구에 따라 정렬된 순서로 전달할 수 있도록 나머지 행을 저장된 상태로 유지합니다.
그MergeJoin노드는 마찬가지로 오른쪽 하위 계획의 첫 번째 행을 요구합니다. 그런 다음 두 행을 비교하여 결합할 수 있는지 확인합니다. 그렇다면 호출자에게 조인 행을 반환합니다. 다음 호출 시 또는 현재 입력 쌍을 조인할 수 없는 경우 즉시 한 테이블 또는 다른 테이블의 다음 행으로 이동하고(비교 결과에 따라) 일치 항목을 다시 확인합니다. 결국 하나의 하위 계획 또는 다른 하위 계획이 소진되고,MergeJoin노드는 더 이상 조인 행을 형성할 수 없음을 나타내기 위해 NULL을 반환합니다.
복잡한 쿼리에는 여러 수준의 계획 노드가 포함될 수 있지만 일반적인 접근 방식은 동일합니다. 각 노드는 호출될 때마다 다음 출력 행을 계산하고 반환합니다. 각 노드는 플래너가 할당한 선택 또는 투영 표현식을 적용하는 역할도 담당합니다.
실행기 메커니즘은 다섯 가지 기본 SQL 쿼리 유형을 모두 평가하는 데 사용됩니다.선택, 삽입, 업데이트, 삭제및병합. 에 대한선택, 최상위 실행기 코드는 쿼리 계획 트리에서 반환된 각 행을 클라이언트로 보내기만 하면 됩니다.삽입 ... 선택, 업데이트, 삭제및병합효과적입니다선택s라는 특별한 최상위 계획 노드 아래에 있습니다.테이블 수정.
삽입 ... 선택최대 행을 피드테이블 수정삽입용. 에 대한업데이트, 플래너는 계산된 각 행에 업데이트된 모든 열 값과TID14158_14238테이블 수정노드는 정보를 사용하여 업데이트된 새 행을 생성하고 이전 행을 삭제된 것으로 표시합니다. 에 대한삭제, 계획에 의해 실제로 반환되는 유일한 열은 TID이며,테이블 수정노드는 단순히 TID를 사용하여 각 대상 행을 방문하고 삭제된 것으로 표시합니다. 에 대한병합, 플래너는 소스 및 대상 관계를 조인하고 다음 중 하나에 필요한 모든 열 값을 포함합니다.언제절과 대상 행의 TID; 이 데이터는 다음과 같은 결과를 낳습니다.테이블 수정정보를 사용하여 어떤 것이 무엇인지 알아내는 노드언제절을 실행한 다음 필요에 따라 대상 행을 삽입, 업데이트 또는 삭제합니다.
간단한삽입 ... 값명령은 단일로 구성된 간단한 계획 트리를 생성합니다.결과노드, 단 하나의 결과 행을 계산하여 이를 다음까지 제공합니다.테이블 수정삽입을 수행합니다.