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