이 문서는 지원되지 않는 버전의 토토을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 57.2. 와이즈 토토 데이터 래퍼 콜백 루틴버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

50.2. 토토 데이터 래퍼 콜백 루틴

FDW 핸들러 함수는 palloc'd를 반환합니다fdwroutine포인터를 포함하는 구조 다음 토토 기능 :

fdwplan *
planforeignscan (oid forometableid,
                 plannerinfo *루트,
                 reploptinfo *baserel);

토토 테이블에서 스캔을 계획하십시오. 쿼리가있을 때 호출됩니다 계획된.토토인PG_CLASS토토 표의 OID.루트는 플래너의 글로벌 정보입니다 쿼리에 대해Baserelis 이 표에 대한 플래너의 정보. 함수는 반환해야합니다 비용 추정치와 그에 대한 palloc'd 구조 토토인을 실행하는 데 필요한 FDW- 민간 정보 나중에 스캔하십시오. (개인 정보는 있어야합니다 형식으로 표현CopyObject복사 방법을 알고 있습니다.)

정보루트andBaserel양을 줄이는 데 사용할 수 있습니다 외국 테이블에서 가져와야하는 정보의 따라서 비용 추정치를 줄입니다).Baserel- Baserestrictinfo특히입니다 흥미롭게, 제한이 포함되어 있기 때문에 (여기서Clauses)는 행을 필터링하는 데 사용할 수 있습니다 가져 오기 위해. (FDW는이 quals를 시행 할 필요가 없습니다. 완성 된 계획이 어쨌든 다시 확인 될 것입니다.)Baserel- reltargetList결정에 사용될 수 있습니다 어떤 열을 가져와야하는지.

반환 비용 추정치 외에도 기능이 있어야합니다 업토토트Baserel- 행회계 후 스캔으로 반환 된 행 수 제한에 의해 수행 된 필터링. 초기 의 가치Baserel- 행는 a입니다 상수 기본 추정치,이 경우 교체해야합니다. 가능한. 함수는 또한 업토토트를 선택할 수 있습니다Baserel- 너비더 나은 계산을 할 수 있다면 평균 결과 행 너비의 추정치.

무효
foreignscan을 설명
                    설명 *es);

추가 인쇄설명출력 a 토토 테이블 스캔. 필요하지 않으면 반환 할 수 있습니다. 무엇이든 인쇄하십시오. 그렇지 않으면 호출해야합니다설명 프 로퍼 타입 텍스트및 관련 기능 에 필드 추가설명출력. 그만큼 깃발 필드es익숙해 질 수 있습니다 인쇄 할 내용과 상태를 결정하십시오.Outissscanstate노드를 검사 할 수 있습니다 에서 런타임 통계 제공설명 분석CASE.

무효
excernforeignscan (토토 scanstate *노드,
                  int eflags);

토토 스캔 실행을 시작하십시오. 이것은 집행자 중에 호출됩니다 스타트 업. 이전에 필요한 초기화를 수행해야합니다 스캔이 시작될 수 있지만 실제 스캔을 실행하지는 않습니다 ( 첫 번째 호출에 따라 수행해야ITREARESFOREIGSCAN). 그만큼Outissscanstate노드가 이미 생성되었습니다. 하지만 그것FDW_STATE필드는 여전히 있습니다 널. 스캔 할 테이블에 대한 정보는 액세스 할 수 있습니다 그만큼Outissscanstate노드 (in 특히, 기본에서Outissscan포인터를 포함하는 계획 노드fdwplan구조에 의해 반환 된 구조planforeignscan).

(eflags & exec_flag_explain_only)사실 이므로이 기능은해서는 안됩니다 외부에서 볼 수있는 행동을 수행합니다. 그것은 단지 만해야합니다 노드 상태를 유효하게 만드는 데 필요한 최소설명 foreignscanandendforeignscan.

tupletableslot *
반복적

토토 소스에서 한 줄을 가져와 튜플로 반환 테이블 슬롯 (노드scantupleslot이 목적으로 사용해야합니다). 더 이상 행이없는 경우 널 리턴 사용 가능. 튜플 테이블 슬롯 인프라는 둘 중 하나를 허용합니다 물리적 또는 가상 튜플이 반환됩니다. 대부분의 경우 후자의 선택은 성능 관점에서 바람직합니다. 메모 이것은 단기간의 메모리 컨텍스트에서 호출됩니다. 호출간에 재설정됩니다. 에서 메모리 컨텍스트 생성초보자 사이클필요한 경우 더 많은 수명 스토리지 또는 사용es_query_cxt노드의Estate.

반환 된 행은 토토 테이블이 스캔됩니다. 최적화하기로 선택한 경우 필요하지 않은 열을 가져 오면 Nulls를 삽입해야합니다. 그 열 위치.

참고토토's 집행 인은 반환 된 행이 |NOT NULL정의 된 제약 조건 토토 테이블 열에서 - 그러나 플래너는 관리하고 5 월 If를 잘못 쿼리 최적화하십시오.NULL값은 포함하지 말라고 선언 한 열에 있습니다. aNULL값은 사용자가 발생합니다 아무도 존재하지 않아야한다고 선언했으며, 적절할 수 있습니다. 오류를 제기하려면 ( 데이터 유형 불일치).

무효
rescanforeignscan (foreignscanstate *노드);

처음부터 스캔을 다시 시작하십시오. 모든 매개 변수에 유의하십시오 스캔은 값이 변경되었을 수 있으므로 새 스캔이 반드시 같은 행을 반드시 반환 할 필요는 없습니다.

무효
endforeignscan (foreignscanstate *노드);

스캔 및 릴리스 리소스를 종료하십시오. 일반적으로 그렇지 않습니다 Palloc'd 메모리를 해제하는 것이 중요하지만 예를 들어 열린 파일 원격 서버에 대한 연결을 정리해야합니다.

thefdwroutineandfdwplan구조물 유형은SRC/포함/토토/fdwapi.h추가 세부 사항.