Postgresql 9.1.24 문서 | ||||
---|---|---|---|---|
PostgreSQL : 문서 : 9.1 : 외국 사설 토토 사이트 | up | 50 장. 토토 데이터 포장지 작성 | 토토 캔 : 문서 : 9.1 : 유전자 쿼리 옵티마이저 |
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)사실 이므로이 기능은해서는 안됩니다
외부에서 볼 수있는 행동을 수행합니다. 그것은 단지 만해야합니다
노드 상태를 유효하게 만드는 데 필요한 최소설명 foreignscan
andendforeignscan
.
tupletableslot * 반복적
토토 소스에서 한 줄을 가져와 튜플로 반환
테이블 슬롯 (노드scantupleslot이 목적으로 사용해야합니다). 더 이상 행이없는 경우 널 리턴
사용 가능. 튜플 테이블 슬롯 인프라는 둘 중 하나를 허용합니다
물리적 또는 가상 튜플이 반환됩니다. 대부분의 경우
후자의 선택은 성능 관점에서 바람직합니다. 메모
이것은 단기간의 메모리 컨텍스트에서 호출됩니다.
호출간에 재설정됩니다. 에서 메모리 컨텍스트 생성초보자 사이클
필요한 경우
더 많은 수명 스토리지 또는 사용es_query_cxt노드의Estate.
반환 된 행은 토토 테이블이 스캔됩니다. 최적화하기로 선택한 경우 필요하지 않은 열을 가져 오면 Nulls를 삽입해야합니다. 그 열 위치.
참고토토's 집행 인은 반환 된 행이 |NOT NULL정의 된 제약 조건 토토 테이블 열에서 - 그러나 플래너는 관리하고 5 월 If를 잘못 쿼리 최적화하십시오.NULL값은 포함하지 말라고 선언 한 열에 있습니다. aNULL값은 사용자가 발생합니다 아무도 존재하지 않아야한다고 선언했으며, 적절할 수 있습니다. 오류를 제기하려면 ( 데이터 유형 불일치).
무효 rescanforeignscan (foreignscanstate *노드);
처음부터 스캔을 다시 시작하십시오. 모든 매개 변수에 유의하십시오 스캔은 값이 변경되었을 수 있으므로 새 스캔이 반드시 같은 행을 반드시 반환 할 필요는 없습니다.
무효 endforeignscan (foreignscanstate *노드);
스캔 및 릴리스 리소스를 종료하십시오. 일반적으로 그렇지 않습니다 Palloc'd 메모리를 해제하는 것이 중요하지만 예를 들어 열린 파일 원격 서버에 대한 연결을 정리해야합니다.
thefdwroutineandfdwplan구조물 유형은SRC/포함/토토/fdwapi.h추가 세부 사항.