| PostgreSQL 9.1.24 문서 | ||||
|---|---|---|---|---|
| PostgreSQL : 문서 : 9.1 : 외국 사설 토토 사이트 래퍼 함수 | 위로 | 50장. 토토 데이터 래퍼 작성 | 토토 캔 : 문서 : 9.1 : 유전자 쿼리 옵티마이저 | |
FDW 핸들러 함수는 palloc'd를 반환합니다.Fdw루틴에 대한 포인터를 포함하는 구조체 다음 콜백 함수:
Fdw계획 *
PlanForeignScan(Oid foreigntableid,
PlannerInfo *루트,
RelOptInfo *baserel);
토토 테이블에 대한 스캔을 계획하십시오. 쿼리가 있을 때 호출됩니다.
예정.토토테이블ID이것이pg_class토토 테이블의 OID.루트플래너의 글로벌 정보입니다
쿼리에 대해, 그리고바셀이것은
이 테이블에 대한 기획자의 정보입니다. 함수는 반환되어야 합니다.
비용 견적과 기타 비용을 포함하는 palloc'd 구조체
FDW-해외업무 수행에 필요한 개인정보
나중에 스캔하세요. (개인정보는 반드시
다음과 같은 형태로 표현됩니다.copyObject복사하는 방법을 알고 있습니다.)
정보루트그리고바셀금액을 줄이는 데 사용할 수 있습니다. 외부 테이블에서 가져와야 하는 정보(그리고 따라서 예상 비용을 줄이세요).baserel-baserestrictinfo특히 제한 한정어()가 포함되어 있어 흥미롭습니다.어디10714_10878baserel-reltargetlist결정하는 데 사용될 수 있습니다. 어떤 열을 가져와야 하는지.
비용 견적을 반환하는 것 외에도 함수는 다음을 수행해야 합니다. 업데이트바렐-행이 되려면 계산 후 스캔에서 반환된 예상 행 수 제한 조건에 의해 필터링이 수행됩니다. 초기 값baserel-행그냥 일정한 기본 추정치, 만약 있다면 대체되어야 함 가능합니다. 이 기능은 업데이트를 선택할 수도 있습니다.바셀-너비더 나은 계산을 할 수 있다면 평균 결과 행 너비의 추정치입니다.
공허
explainForeignScan(ForeignScanState *노드,
explainState *es);
추가 인쇄설명에 대한 출력
토토 테이블 스캔. 필요하지 않은 경우 반환될 수 있습니다.
무엇이든 인쇄하세요. 그렇지 않으면 호출해야 합니다.ExplainPropertyText및 관련 기능
에 필드를 추가하세요.설명출력. 는
플래그 필드es다음에 사용할 수 있습니다.
인쇄할 내용과 상태를 결정합니다.ForeignScanState노드를 검사할 수 있습니다.
런타임 통계를 제공합니다.설명하세요
분석사례.
공허
BeginForeignScan(ForeignScanState *노드,
int 플래그);
외부 스캔 실행을 시작합니다. 이는 실행자 중에 호출됩니다.
시작. 이전에 필요한 초기화를 수행해야 합니다.
스캔을 시작할 수 있지만 실제 스캔 실행은 시작할 수 없습니다(즉,
첫 번째 호출 시 수행되어야 합니다.IterateForeignScan).ForeignScanState노드가 이미 생성되었습니다.
하지만 그건fdw_state필드는 아직입니다.
NULL. 스캔할 테이블에 대한 정보는 다음을 통해 액세스할 수 있습니다.ForeignScanState노드(에서
특히, 기본에서ForeignScan포인터가 포함된 계획 노드
에FdwPlan다음에 의해 반환된 구조PlanForeignScan).
다음에 주의하세요.(플래그 &
EXEC_FLAG_EXPLAIN_ONLY)이 사실입니다. 이 함수는 그렇지 않습니다.
토토적으로 보이는 모든 작업을 수행합니다. 그것은 단지
노드 상태를 유효하게 만드는 데 필요한 최소값ExplainForeignScan그리고EndForeignScan.
TupleTableSlot * IterateForeignScan(ForeignScanState *노드);
토토 소스에서 한 행을 가져와서 튜플로 반환합니다.
테이블 슬롯(노드의ScanTupleSlot이 목적으로 사용되어야 합니다). 더 이상 행이 없으면 NULL을 반환합니다.
가능합니다. 튜플 테이블 슬롯 인프라는 다음 중 하나를 허용합니다.
반환될 물리적 또는 가상 튜플입니다. 대부분의 경우
성능 측면에서는 후자를 선택하는 것이 좋습니다. 참고
이는 단기 메모리 컨텍스트에서 호출됩니다.
호출 사이에 재설정됩니다. 에서 메모리 컨텍스트를 생성합니다.BeginForeignScan필요하다면
더 오래 지속되는 스토리지를 사용하거나es_query_cxt노드의EState.
반환된 행은 열 서명과 일치해야 합니다. 스캔 중인 토토 테이블. 최적화를 선택하지 않은 경우 필요하지 않은 열을 가져오는 경우에는 null을 삽입해야 합니다. 그 열 위치.
참고하세요PostgreSQL의 실행자는 반환된 행이를 위반하는지 여부를 신경 쓰지 않습니다.NULL이 아님정의된 제약조건 외래 테이블 열에 - 하지만 플래너는 신경쓰고, 다음과 같은 경우 쿼리를 잘못 최적화합니다.NULL값을 포함하지 않도록 선언된 열에 값이 있습니다. 만약에NULL사용자가 값을 발견했을 때 아무도 참석해서는 안 된다고 선언했는데, 그것이 적절할 수도 있습니다. 오류를 발생시키려면(예: 데이터 유형 불일치).
공허 ReScanForeignScan(ForeignScanState *노드);
스캔을 처음부터 다시 시작하십시오. 모든 매개변수는 스캔에 따라 값이 변경되었을 수 있으므로 새 스캔이 수행됩니다. 반드시 동일한 행을 반환할 필요는 없습니다.
공허 EndForeignScan(ForeignScanState *노드);
스캔을 종료하고 자원을 해제합니다. 일반적으로 그렇지 않습니다. palloc의 메모리를 해제하는 것이 중요하지만 예를 들어 열린 파일 원격 서버에 대한 연결을 정리해야 합니다.
그Fdw루틴그리고FdwPlan구조체 유형은 다음에서 선언됩니다.src/include/foreign/fdwapi.h, 다음을 참조하세요. 추가 세부정보입니다.