Postgresql 9.2.24 문서 | ||||
---|---|---|---|---|
PostgreSQL : 문서 : 9.2 : 외국 메이저 토토 사이트 래퍼 함수 | up | 50 장. 롤 토토 데이터 포장지 작성 | 다음 |
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)사실 이므로이 기능은해서는 안됩니다
외부에서 볼 수있는 행동을 수행합니다. 그것은 단지 만해야합니다
노드 상태를 유효하게 만드는 데 필요한 최소설명 foreignscan
andendforeignscan
.
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추가 세부 사항.