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

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

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

무효
getforeignrelsize (plannerinfo *root,
                   reploptinfo *baserel,
                   oid forexableid);

롤 토토 표에 대한 관계 크기 추정치를 얻습니다. 이것은 관련 쿼리 계획을 시작할 때 롤 토토 테이블.루트는 플래너입니다 쿼리에 대한 글로벌 정보;Baserel이에 대한 플래너의 정보입니다 테이블; 그리고ForevingableIDPG_CLASS롤 토토 테이블의 OID. (ForevingableId에서 얻을 수 있습니다 플래너 데이터 구조이지만 저장하기 위해 명시 적으로 전달되었습니다. 노력.)

이 기능이 업데이트되어야합니다Baserel- 행예상 행의 수가되기 위해 필터링을 설명 한 후 테이블 스캔으로 반환 제한에 의해 수행됩니다. 의 초기 값Baserel- 행은 일정한 기본값입니다 가능한 경우 교체해야합니다. 그만큼 함수는 또한 업데이트를 선택할 수 있습니다Baserel- 너비더 나은 계산을 할 수 있다면 평균 결과 행 너비의 추정치.

참조메이저 토토 사이트 : 문서 : 9.2 : 외국 데이터 래퍼 쿼리 메이저 토토 사이트추가 정보.

무효
getforeignpaths (plannerinfo *루트,
                 reploptinfo *baserel,
                 oid forexableid);

롤 토토 테이블에서 스캔 할 수있는 액세스 경로를 만듭니다. 이것은 쿼리 계획 중에 호출됩니다. 매개 변수는 동일합니다 forgetforeignRelsize이미 불렸다.

이 함수는 하나 이상의 액세스 경로를 생성해야합니다 (롤 토토 경로노드) 롤 토토 테이블 및 전화해야add_path그러한 각 경로를 추가하려면Baserel- PathList. 사용하는 것이 좋습니다create_foreignscan_path빌드 그만큼롤 토토 경로노드. 기능 여러 액세스 경로 (예 : 유효한 경로)를 생성 할 수 있습니다Pathkeys사전 분류를 나타내려면 결과. 각 액세스 경로에는 비용 추정치가 포함되어야합니다 식별하는 데 필요한 FDW- 민간 정보가 포함되어 있습니다 의도 된 특정 스캔 방법.

참조메이저 토토 사이트 : 문서 : 9.2 : 외국 데이터 래퍼 쿼리 메이저 토토 사이트for 추가 정보.

Foreignscan *
getforeignplan (plannerinfo *root,
                reploptinfo *baserel,
                Oid ForeigntableId,
                롤 토토 경로 *best_path,
                목록 *tlist,
                목록 *scan_clauses);

생성Foreignscan계획 노드 선택된 롤 토토 접근 경로에서. 이것은 끝에 불립니다 쿼리 계획의. 매개 변수는입니다.getforeignRelsize, 선택된롤 토토 경로(이전에 생산GetforeignPaths), 대상 목록 계획 노드와 제한 조항에 의해 방출됩니다. 계획 노드에 의해 시행 됨.

이 함수는 a를 생성하고 반환해야합니다.Foreignscan계획 노드; 사용하는 것이 좋습니다make_foreignscan구축하려면Outissscan노드.

참조메이저 토토 사이트 : 문서 : 9.2 : 외국 데이터 래퍼 쿼리 메이저 토토 사이트추가 정보.

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

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

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

외국 스캔 실행을 시작하십시오. 이것은 집행자 중에 호출됩니다 스타트 업. 이전에 필요한 초기화를 수행해야합니다 스캔이 시작될 수 있지만 실제 스캔을 실행하지는 않습니다 ( 첫 번째 호출에 따라 수행해야ITREARTEFOREIGNSCAN). 그만큼Outissscanstate노드가 이미 생성되었습니다. 하지만 그것FDW_STATE필드는 여전히 있습니다 널. 스캔 할 테이블에 대한 정보는 액세스 할 수 있습니다 그만큼Outissscanstate노드 (in 특히, 기본에서Foreignscan계획 노드를 포함합니다 FDW- 민간 정보 제공getforeignplan).

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

tupletableslot *
반복적

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

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

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

무효
rescanforeignscan (foreignscanstate *노드);

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

무효
endforeignscan (foreignscanstate *노드);

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

bool
Analyzeforeigntable (관계 관계,
                     arceSamplerowsFunc *func,
                     BlockNumber *TotalPages);

이 함수는 다음에 호출됩니다분석롤 토토 테이블에서 실행됩니다. 만약에 FDW는이 롤 토토 테이블에 대한 통계를 수집 할 수 있습니다. 반품true테이블에서 샘플 행을 수집하는 함수func, 그리고 예상 크기 페이지의 테이블TotalPages. 그렇지 않으면 return거짓. FDW가하는 경우 테이블에 대한 통계 수집을 지원하지 않으면AnalyzeForeignTable포인터가 될 수 있습니다 설정NULL.

제공된 경우 샘플 수집 함수에 있어야합니다 서명

int
AcquireSamplerowsFunc (관계 관계, int elevel,
                       무거운 *행, int targrows,
                       이중 *Totalrows,
                       Double *Totaldeadrows);

최대의 무작위 샘플Targrows행은 테이블에서 수집하고 발신자 제공배열. 실제 수집 된 행 수를 반환해야합니다. 또한 저장하십시오 테이블의 총 살아있는 줄과 죽은 줄의 추정치 출력 매개 변수로TotalrowsandTotalDeadrows. (세트TotalDeadrowsFDW에 없으면 0까지 죽은 줄의 모든 개념.)

thefdwroutine구조 유형은 선언SRC/포함/롤 토토/fdwapi.h추가 세부 사항.