| 젠 토토 : 문서 : 9.6 : 젠 토토 | |||
|---|---|---|---|
| PostgreSQL : 문서 : 9.6 : 사용자 지정 토토 핫 계획 만들기 | PostgreSQL : 문서 : 9.6 : 사용자 정의 토토 캔 제공자 작성 | 57장. 사용자 정의 젠 토토 공급자 작성 | PostgreSQL : 문서 : 9.6 : 유전자 사설 토토 옵티마이저 |
언제CustomScan이 실행되면 실행 상태는 다음과 같이 표시됩니다.CustomScanState, 다음과 같이 선언됩니다.
typedef 구조체 CustomScanState
스캔스테이트 SS;
uint32 플래그;
const CustomExecMethods *메소드;
CustomScanState;
ss젠 토토이 기본 관계가 아닌 조인에 대한 경우를 제외하고는 다른 젠 토토 상태와 마찬가지로 초기화됩니다.ss.ss_currentRelationNULL로 남습니다.플래그는 에서와 같은 의미를 지닌 비트 마스크입니다.CustomPath그리고CustomScan. 메소드필요한 사용자 정의 스캔 상태 메소드를 구현하는(일반적으로 정적으로 할당된) 객체를 가리켜야 합니다. 이에 대해서는 아래에서 자세히 설명합니다. 일반적으로 aCustomScanState, 지원이 필요하지 않음copyObject는 실제로 위 항목을 첫 번째 구성원으로 포함하는 더 큰 구조가 됩니다.
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 *node);
다음에 의해 저장된 이전 스캔 위치를 복원MarkPosCustomScan콜백. 이 콜백은 선택 사항이며 다음과 같은 경우에만 제공되어야 합니다.CUSTOMPATH_SUPPORT_MARK_RESTORE플래그가 설정되었습니다.
크기(*EstimateDSMCustomScan) (CustomScanState *노드,
ParallelContext *pcxt);
병렬 작업에 필요한 동적 공유 메모리의 양을 추정합니다. 이는 실제 사용되는 금액보다 높을 수 있지만, 낮아져서는 안 됩니다. 반환 값은 바이트 단위입니다. 이 콜백은 선택사항이며 이 맞춤 검색 공급자가 병렬 실행을 지원하는 경우에만 제공되어야 합니다.
void (*InitializeDSMCustomScan) (CustomScanState *노드,
ParallelContext *pcxt,
무효 *좌표);
병렬 작업에 필요한 동적 공유 메모리를 초기화합니다.좌표반환 값과 동일한 할당 공간의 양을 가리킴EstimateDSMCustomScan. 이 콜백은 선택사항이며 이 맞춤 검색 공급자가 병렬 실행을 지원하는 경우에만 제공되어야 합니다.
void (*InitializeWorkerCustomScan) (CustomScanState *노드,
shm_toc *toc,
무효 *좌표);
리더에 설정된 공유 상태를 기반으로 병렬 작업자의 사용자 정의 상태를 초기화합니다.DSMCustomScan 초기화. 이 콜백은 선택사항이며 이 맞춤 경로가 병렬 실행을 지원하는 경우에만 제공되어야 합니다.
void (*ExplainCustomScan) (CustomScanState *노드,
*조상 목록,
explainState *es);
다음에 대한 추가 정보 출력설명커스텀 젠 토토 계획 노드의. 이 콜백은 선택사항입니다. 에 저장된 공통 데이터ScanState(예: 대상 목록 및 검색 관계)은 이 콜백 없이도 표시되지만 콜백을 사용하면 추가 비공개 상태를 표시할 수 있습니다.