이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 57.2. 와이즈 토토 데이터 래퍼 콜백 루틴버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

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

FDW 핸들러 함수는 palloc'd를 반환합니다.Fdw루틴에 대한 포인터를 포함하는 구조체 다음 콜백 함수:

공허
GetForeignRelSize(PlannerInfo *루트,
                   RelOptInfo *baserel,
                   Oid foreigntableid);

외부 테이블에 대한 관계 크기 추정치를 얻습니다. 이것은 관련된 쿼리에 대한 계획을 시작할 때 호출됩니다. 롤 토토 테이블.루트기획자의 것입니다 쿼리에 대한 전역 정보;바셀이것에 대한 기획자의 정보입니다 테이블; 그리고롤 토토테이블ID이것은pg_class롤 토토 테이블의 OID입니다. (롤 토토테이블ID다음에서 얻을 수 있습니다. 플래너 데이터 구조이지만 저장하기 위해 명시적으로 전달되었습니다. 노력.)

이 기능은 업데이트되어야 합니다.baserel-행예상되는 행 수 필터링을 고려한 후 테이블 스캔으로 반환됨 제한 조건에 의해 수행됩니다. 초기값은baserel-행그냥 상수 기본값입니다 가능하다면 교체해야 하는 견적입니다. 는 함수는 업데이트를 선택할 수도 있습니다.바셀-너비더 나은 계산을 할 수 있다면 평균 결과 행 너비의 추정치입니다.

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

공허
GetForeignPaths(PlannerInfo *루트,
                 RelOptInfo *baserel,
                 Oid foreigntableid);

롤 토토 테이블에서 스캔을 위한 가능한 액세스 경로를 생성하십시오. 이는 쿼리 계획 중에 호출됩니다. 매개변수는 동일합니다. 에 관해서는GetForeignRelSize이미 호출되었습니다.

이 함수는 최소한 하나의 액세스 경로를 생성해야 합니다 (ForeignPath노드)를 스캔합니다. 롤 토토 테이블이므로 전화해야 함add_path각 경로를 추가하려면baserel-경로 목록. 사용하는 것이 좋습니다.create_foreignscan_path건축하다ForeignPath노드. 기능 여러 액세스 경로(예: 유효한 경로)를 생성할 수 있습니다.경로키미리 정렬된 것을 나타냄 결과. 각 액세스 경로에는 예상 비용이 포함되어야 하며 다음을 수행할 수 있습니다. 식별하는 데 필요한 FDW 개인 정보가 포함되어 있습니다. 의도된 특정 스캔 방법.

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

ForeignScan *
GetForeignPlan(PlannerInfo *루트,
                RelOptInfo *baserel,
                Oid foreigntableid,
                ForeignPath *best_path,
                목록 *tlist,
                *scan_clauses 나열);

만들기ForeignScan계획 노드 선택한 외부 액세스 경로에서. 이것은 마지막에 호출됩니다. 쿼리 계획의 매개변수는 다음과 같습니다.GetForeignRelSize+선택한 것ForeignPath(이전에 제작됨GetForeignPaths), 대상 목록 계획 노드에 의해 방출되고 제한 조항은 계획 노드에 의해 시행됩니다.

이 함수는 다음을 생성하고 반환해야 합니다.ForeignScan계획 노드; 사용하는 것이 좋습니다.make_foreignscan빌드하기 위해ForeignScan노드.

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

공허
explainForeignScan(ForeignScanState *노드,
                    explainState *es);

추가 인쇄설명에 대한 출력 롤 토토 테이블 스캔. 필요하지 않은 경우 반환될 수 있습니다. 무엇이든 인쇄하세요. 그렇지 않으면 호출해야 합니다.ExplainPropertyText및 관련 기능 에 필드를 추가하세요.설명출력. 는 플래그 필드es다음에 사용할 수 있습니다. 인쇄할 내용과 상태를 결정합니다.ForeignScanState노드를 검사할 수 있습니다. 런타임 통계를 제공합니다.설명하세요 분석케이스.

공허
BeginForeignScan(ForeignScanState *노드,
                  int 플래그);

외부 스캔 실행을 시작합니다. 이는 실행자 중에 호출됩니다. 시작. 이전에 필요한 초기화를 수행해야 합니다. 스캔을 시작할 수 있지만 실제 스캔 실행은 시작할 수 없습니다(즉, 첫 번째 호출 시 수행되어야 합니다.IterateForeignScan).ForeignScanState노드가 이미 생성되었습니다. 하지만 그건fdw_state필드는 아직입니다 NULL. 스캔할 테이블에 대한 정보는 다음을 통해 액세스할 수 있습니다.ForeignScanState노드(에서 특히, 기본에서ForeignScan모든 항목을 포함하는 계획 노드 FDW-개인 정보 제공:GetForeignPlan).

언제든지 주의하세요(플래그 & EXEC_FLAG_EXPLAIN_ONLY)이 사실입니다. 이 함수는 그렇지 않습니다. 롤 토토적으로 보이는 모든 작업을 수행합니다. 그것은 단지 노드 상태를 유효하게 만드는 데 필요한 최소값ExplainForeignScan그리고EndForeignScan.

TupleTableSlot *
IterateForeignScan(ForeignScanState *노드);

롤 토토 소스에서 한 행을 가져와서 튜플로 반환합니다. 테이블 슬롯(노드의ScanTupleSlot이 목적으로 사용되어야 합니다). 더 이상 행이 없으면 NULL을 반환합니다. 가능합니다. 튜플 테이블 슬롯 인프라는 다음 중 하나를 허용합니다. 반환될 물리적 또는 가상 튜플입니다. 대부분의 경우 성능 측면에서는 후자를 선택하는 것이 좋습니다. 참고 이는 단기 메모리 컨텍스트에서 호출됩니다. 호출 사이에 재설정됩니다. 에서 메모리 컨텍스트를 생성합니다.BeginForeignScan필요하다면 더 오래 지속되는 스토리지를 사용하거나es_query_cxt노드의EState.

반환된 행은 다음의 열 서명과 일치해야 합니다. 스캔 중인 외부 테이블. 최적화를 선택하지 않은 경우 필요하지 않은 열을 가져오는 경우에는 null을 삽입해야 합니다. 그 열 위치.

참고포스트그레SQL의 실행자는 반환된 행이를 위반하는지 여부를 신경 쓰지 않습니다.NULL이 아님정의된 제약조건 외래 테이블 열에 - 하지만 플래너는 신경쓰고, 다음과 같은 경우 쿼리를 잘못 최적화합니다.NULL값을 포함하지 않도록 선언된 열에 값이 있습니다. 만약에NULL사용자가 값을 발견했을 때 아무도 참석해서는 안 된다고 선언했는데, 그것이 적절할 수도 있습니다. 오류를 발생시키려면(예: 데이터 유형 불일치).

공허
ReScanForeignScan(ForeignScanState *노드);

스캔을 처음부터 다시 시작하세요. 모든 매개변수는 스캔에 따라 값이 변경되었을 수 있으므로 새 스캔이 수행됩니다. 반드시 동일한 행을 반환할 필요는 없습니다.

공허
EndForeignScan(ForeignScanState *노드);

스캔을 종료하고 자원을 해제합니다. 일반적으로 그렇지 않습니다. palloc의 메모리를 해제하는 것이 중요하지만 예를 들어 열린 파일 원격 서버에 대한 연결을 정리해야 합니다.

부울
AnalyzeForeignTable(관계 관계,
                     AcquireSampleRowsFunc *func,
                     BlockNumber *총 페이지 수);

이 함수는 다음과 같은 경우에 호출됩니다.분석롤 토토 테이블에서 실행됩니다. 만약에 FDW는 이 롤 토토 테이블에 대한 통계를 수집할 수 있습니다. 반환, 포인터를 제공합니다. 테이블에서 샘플 행을 수집하는 함수펑크및 예상 크기 페이지의 테이블총 페이지. 그렇지 않으면 반환거짓. FDW가 수행하는 경우 모든 테이블에 대한 통계 수집을 지원하지 않습니다.외부 테이블 분석포인터는 다음과 같습니다. 으로 설정됨NULL.

제공된 경우 샘플 수집 기능에는 다음이 있어야 합니다. 서명

정수
AcquireSampleRowsFunc(관계 관계, int elevel,
                       HeapTuple *행, int targrows,
                       이중 *합계,
                       double *totaldeadrows);

최대 무작위 샘플대상 성장행은 테이블에서 수집되어 발신자 제공배열. 실제 수집된 행 수가 반환되어야 합니다. 게다가 매장 테이블의 활성 행과 데드 행의 총 개수 추정 출력 매개변수에총계그리고총 교착 상태. (설정총 교착 상태FDW에 없는 경우 0으로 설정 데드 행의 개념.)

Fdw루틴구조체 유형은 다음과 같습니다. 에서 선언됨src/include/foreign/fdwapi.h, 다음 내용을 참조하세요. 추가 세부정보입니다.