이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 59.3. 맞춤 토토 베이 실행버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

58.3. 사용자 정의 사설 토토 실행

언제CustomScan이 실행되면 실행 상태는 다음과 같이 표시됩니다.CustomScanState, 다음과 같이 선언됩니다.

typedef 구조체 CustomScanState

    스캔스테이트 SS;
    uint32 플래그;
    const CustomExecMethods *메소드;
 CustomScanState;

ss사설 토토이 기본 관계가 아닌 조인에 대한 경우를 제외하고는 다른 사설 토토 상태와 마찬가지로 초기화됩니다.ss.ss_currentRelationNULL로 남습니다.플래그는 에서와 같은 의미를 지닌 비트 마스크입니다.사용자 정의 경로그리고CustomScan. 메소드필요한 사용자 정의 스캔 상태 메소드를 구현하는(일반적으로 정적으로 할당된) 객체를 가리켜야 합니다. 이에 대해서는 아래에서 자세히 설명합니다. 일반적으로 aCustomScanState, 지원이 필요하지 않음copyObject는 실제로 위 항목을 첫 번째 구성원으로 포함하는 더 큰 구조가 됩니다.

58.3.1. 사용자 정의 사설 토토 실행 콜백

void (*BeginCustomScan) (CustomScanState *노드,
                         부동산 *부동산,
                         int 플래그);

제공된 초기화 완료CustomScanState. 표준 필드는 다음에 의해 초기화되었습니다.ExecInitCustomScan, 그러나 모든 비공개 필드는 여기에서 초기화되어야 합니다.

TupleTableSlot *(*ExecCustomScan) (CustomScanState *노드);

다음 스캔 튜플을 가져옵니다. 튜플이 남아 있으면 채워져야 합니다.ps_ResultTupleSlot현재 스캔 방향의 다음 튜플을 사용하고 튜플 슬롯을 반환합니다. 그렇지 않다면,NULL또는 빈 슬롯이 반환되어야 합니다.

void (*EndCustomScan) (CustomScanState *노드);

다음과 관련된 모든 개인 데이터를 정리하십시오.CustomScanState. 이 방법은 필수이지만 관련 데이터가 없거나 자동으로 정리되는 경우에는 아무것도 할 필요가 없습니다.

void (*ReScanCustomScan) (CustomScanState *노드);

현재 스캔을 처음으로 되감고 관계를 다시 스캔할 준비를 하십시오.

void (*MarkPosCustomScan) (CustomScanState *노드);

현재 스캔 위치를 저장하여 나중에 복원할 수 있도록RestrPosCustomScan콜백. 이 콜백은 선택 사항이며 다음과 같은 경우에만 제공되어야 합니다.CUSTOMPATH_SUPPORT_MARK_RESTORE플래그가 설정되었습니다.

void (*RestrPosCustomScan) (CustomScanState *노드);

다음에 의해 저장된 이전 스캔 위치를 복원MarkPosCustomScan콜백. 이 콜백은 선택 사항이며 다음과 같은 경우에만 제공되어야 합니다.CUSTOMPATH_SUPPORT_MARK_RESTORE플래그가 설정되었습니다.

크기(*EstimateDSMCustomScan) (CustomScanState *노드,
                               ParallelContext *pcxt);

병렬 작업에 필요한 동적 공유 메모리의 양을 추정합니다. 이는 실제 사용되는 금액보다 높을 수 있지만, 낮아져서는 안 됩니다. 반환 값은 바이트 단위입니다. 이 콜백은 선택사항이며 이 맞춤 검색 공급자가 병렬 실행을 지원하는 경우에만 제공되어야 합니다.

void (*InitializeDSMCustomScan) (CustomScanState *노드,
                                 ParallelContext *pcxt,
                                 무효 *좌표);

병렬 작업에 필요한 동적 공유 메모리를 초기화합니다.좌표반환 값과 동일한 크기의 공유 메모리 영역을 가리킵니다.추정DSMCustomScan. 이 콜백은 선택사항이며 이 맞춤 검색 공급자가 병렬 실행을 지원하는 경우에만 제공되어야 합니다.

void (*ReInitializeDSMCustomScan) (CustomScanState *노드,
                                   ParallelContext *pcxt,
                                   무효 *좌표);

사용자 정의 스캔 계획 노드가 다시 스캔되려고 할 때 병렬 작업에 필요한 동적 공유 메모리를 다시 초기화합니다. 이 콜백은 선택 사항이며 이 사용자 지정 검색 공급자가 병렬 실행을 지원하는 경우에만 제공해야 합니다. 권장되는 방법은 이 콜백이 공유 상태만 재설정하는 반면,ReScanCustomScan콜백은 로컬 상태만 재설정합니다. 현재 이 콜백은 이전에 호출됩니다.ReScanCustomScan, 하지만 그 순서에 의존하지 않는 것이 가장 좋습니다.

void (*InitializeWorkerCustomScan) (CustomScanState *노드,
                                    shm_toc *toc,
                                    무효 *좌표);

리더가 설정한 공유 상태를 기반으로 병렬 작업자의 로컬 상태를 초기화합니다.DSMCustomScan 초기화. 이 콜백은 선택사항이며 이 맞춤 검색 공급자가 병렬 실행을 지원하는 경우에만 제공되어야 합니다.

void (*ShutdownCustomScan) (CustomScanState *노드);

노드 실행이 완료되지 않을 것으로 예상되면 리소스를 해제하십시오. 모든 경우에 호출되는 것은 아닙니다. 가끔,EndCustomScan이 함수가 먼저 호출되지 않은 채 호출될 수 있습니다. 병렬 쿼리에 사용되는 DSM 세그먼트는 이 콜백이 호출된 직후 삭제되므로 DSM 세그먼트가 사라지기 전에 몇 가지 조치를 취하려는 맞춤 사설 토토 제공자는 이 메서드를 구현해야 합니다.

void (*ExplainCustomScan) (CustomScanState *노드,
                           *조상 목록,
                           explainState *es);

다음에 대한 추가 정보 출력설명커스텀 사설 토토 계획 노드의. 이 콜백은 선택사항입니다. 에 저장된 공통 데이터사설 토토상태(예: 대상 목록 및 검색 관계)은 이 콜백 없이도 표시되지만 콜백을 사용하면 추가 비공개 상태를 표시할 수 있습니다.