| PostgreSQL 9.3.25 문서 | ||||
|---|---|---|---|---|
| 토토 결과 : 문서 : 9.3 : 외국 데이터 래퍼 함수 | PostgreSQL : 문서 : 9.3 : 외국 데이터 래퍼 토토 핫 | 52장. 쓰기 외부 메이저 토토 사이트 래퍼 | 토토 사이트 순위 : 문서 : 9.3 : 외국 데이터 래퍼 도우미 기능 | |
FDW 핸들러 함수는 palloc'd를 반환합니다.Fdw루틴에 대한 포인터를 포함하는 구조체 아래에 설명된 콜백 함수. 스캔 관련 기능은 다음과 같습니다. 필수이고 나머지는 선택사항입니다.
그Fdw루틴구조체 유형은 다음과 같습니다. 에서 선언됨src/include/foreign/fdwapi.h, 자세한 내용은 참조하세요.
공허
GetForeignRelSize(PlannerInfo *루트,
RelOptInfo *baserel,
Oid foreigntableid);
외부 테이블에 대한 관계 크기 추정치를 얻습니다. 이것은 검색하는 쿼리를 계획할 때 호출됩니다. 메이저 토토 사이트 테이블.루트기획자의 것입니다 쿼리에 대한 전역 정보;바세렐이것에 대한 기획자의 정보입니다 테이블; 그리고메이저 토토 사이트테이블ID이것은pg_class외부 테이블의 OID. (메이저 토토 사이트테이블ID에서 얻을 수 있습니다. 플래너 메이저 토토 사이트 구조이지만 저장하기 위해 명시적으로 전달되었습니다. 노력.)
이 기능은 업데이트되어야 합니다.baserel-행예상되는 행 수 완료된 필터링을 고려한 후 테이블 스캔으로 반환됨 제한 조건에 따라. 초기값은바세렐-행그냥 상수 기본값입니다 가능하다면 교체해야 하는 견적입니다. 기능 업데이트를 선택할 수도 있습니다.바셀-너비더 나은 계산을 할 수 있다면 평균 결과 행 너비의 추정치입니다.
참조스포츠 토토 사이트 : 문서 : 9.3 : 외국 데이터 포장 쿼리 계획추가 정보.
공허
GetForeignPaths(PlannerInfo *루트,
RelOptInfo *baserel,
Oid foreigntableid);
외부 테이블에 대한 스캔을 위한 가능한 액세스 경로를 생성하십시오. 이
쿼리 계획 중에 호출됩니다. 매개변수는 와 동일합니다.GetForeignRelSize, 이미
호출되었습니다.
이 함수는 최소한 하나의 액세스 경로를 생성해야 합니다(ForeignPath11550_11605add_path각각 추가
그러한 경로는baserel-경로 목록. 그것은
사용을 권장합니다create_foreignscan_path빌드하기 위해ForeignPath노드. 함수는 생성할 수 있습니다
여러 액세스 경로(예: 유효한 경로)경로키미리 정렬된 결과를 나타냅니다. 각각
액세스 경로에는 비용 견적이 포함되어야 하며 다음을 포함할 수 있습니다.
특정 정보를 식별하는 데 필요한 FDW 개인 정보
스캔 방법을 의도했습니다.
참조스포츠 토토 사이트 : 문서 : 9.3 : 외국 데이터 포장 쿼리 계획추가 정보.
ForeignScan *
GetForeignPlan(PlannerInfo *루트,
RelOptInfo *baserel,
Oid foreigntableid,
ForeignPath *best_path,
목록 *tlist,
*scan_clauses 나열);
만들기ForeignScan계획 노드
선택한 외부 액세스 경로. 이것은 마지막에 호출됩니다.
쿼리 계획. 매개변수는 다음과 같습니다.GetForeignRelSize및 선택된 것ForeignPath(이전에 제작됨GetForeignPaths), 내보낼 대상 목록
계획 노드에 의해 시행되는 제한 조항
계획 노드.
이 함수는 다음을 생성하고 반환해야 합니다.ForeignScan계획 노드; 사용하는 것이 좋습니다.make_foreignscan빌드하기 위해ForeignScan노드.
참조스포츠 토토 사이트 : 문서 : 9.3 : 외국 데이터 포장 쿼리 계획추가 정보.
공허
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을 삽입해야 합니다. 열 위치.
참고PostgreSQL의 집행자 반환된 행이 위반하는지 여부는 상관하지 않습니다.NULL이 아님다음에 정의된 제약조건 외래 테이블 열 — 하지만 플래너가 신경쓰고 최적화할 수도 있습니다. 다음과 같은 경우 쿼리가 잘못되었습니다.NULL값은 다음과 같습니다 해당 항목을 포함하지 않는다고 선언된 열에 있습니다. 만약에NULL사용자가 선언할 때 값이 발견되었습니다. 아무도 참석해서는 안 되며, 이를 제기하는 것이 적절할 수 있습니다. 오류(데이터 유형의 경우 수행해야 하는 것과 동일) 불일치).
공허 ReScanForeignScan(ForeignScanState *노드);
스캔을 처음부터 다시 시작하십시오. 모든 매개변수는 스캔에 따라 값이 변경되었을 수 있으므로 새 스캔이 수행됩니다. 반드시 동일한 행을 반환할 필요는 없습니다.
공허 EndForeignScan(ForeignScanState *노드);
스캔을 종료하고 자원을 해제합니다. 일반적으로 중요하지 않습니다. palloc 메모리를 해제하려면 예를 들어 파일을 열고 원격 서버에 대한 연결을 정리해야 합니다.
FDW가 쓰기 가능한 외부 테이블을 지원하는 경우 다음을 제공해야 합니다. 다음 콜백 함수 중 일부 또는 전부는 FDW의 요구 사항 및 기능:
공허
AddForeignUpdateTargets(쿼리 *parsetree,
RangeTblEntry *target_rte,
관계 target_relation);
업데이트그리고삭제행에 대해 작업이 수행됩니다. 이전에 테이블 스캔 기능으로 가져온 것입니다. FDW는 다음을 수행할 수 있습니다. 행 ID 또는 값과 같은 추가 정보가 필요합니다. 기본 키 열 - 정확한 행을 식별할 수 있는지 확인 업데이트하거나 삭제합니다. 이를 지원하기 위해 이 기능은 추가 기능을 추가할 수 있습니다. 숨겨져 있거나"정크", 대상 열을 외부 테이블에서 검색할 열 목록 동안업데이트또는삭제.
그렇게 하려면 다음을 추가하세요.대상 항목항목을parsetree-targetList, 다음을 포함 가져올 추가 값에 대한 표현식입니다. 그러한 각 항목 표시해야 합니다.재정크 = 사실, 고유한이 있어야 합니다.이름 변경실행 시 이를 식별합니다. 일치하는 이름을 사용하지 마십시오.ctidN또는전체N, 코어 시스템은 이러한 이름의 정크 열을 생성할 수 있습니다.
이 함수는 플래너가 아닌 리라이터에서 호출됩니다. 제공되는 정보는 제공되는 정보와 약간 다릅니다. 계획 루틴.파싱 트리파싱입니다 를 위한 나무업데이트또는삭제명령, 동안target_rte그리고target_relation대상 메이저 토토 사이트을 설명하세요 테이블.
만약AddForeignUpdateTargets포인터가 다음으로 설정되었습니다.NULL, 추가 대상 없음
표현이 추가됩니다. (이렇게 하면 구현이 불가능해집니다.삭제작업은 하지만업데이트FDW가
행을 식별하기 위해 기본 키를 변경하지 않습니다.)
목록 *
PlanForeignModify(PlannerInfo *루트,
ModifyTable *계획,
색인 결과관계,
int subplan_index);
삽입에 필요한 추가 계획 작업을 수행합니다.
외부 테이블을 업데이트하거나 삭제합니다. 이 함수는
FDW-에 첨부될 개인 정보테이블 수정업데이트를 수행하는 계획 노드
행동. 이 개인 정보는 다음과 같은 형식이어야 합니다.목록다음으로 전달됩니다.BeginForeignModify실행 중
무대.
루트기획자의 글로벌 쿼리에 대한 정보입니다.계획이것은테이블 수정계획 노드입니다. 다음을 제외하고는 완료되었습니다.fdwPrivLists필드.결과관계식별합니다 범위 테이블 인덱스로 외부 테이블을 대상으로 합니다.하위 계획_index어떤 대상을 식별테이블 수정계획 노드는 이것이 계산 중입니다. 0에서; 색인을 생성하려면 이것을 사용하세요.계획-계획또는 다른 하위 구조계획노드.
참조스포츠 토토 사이트 : 문서 : 9.3 : 외국 데이터 포장 쿼리 계획추가 정보.
만약PlanForeign수정포인터
으로 설정되었습니다.NULL, 추가 계획 시간 없음
조치가 취해지며,fdw_private목록 전달 대상BeginForeignModifyNIL이 됩니다.
공허
BeginForeignModify(ModifyTableState *mtstate,
ResultRelInfo *rinfo,
*fdw_private 목록,
int 하위 계획_색인,
int 플래그);
외부 테이블 수정 작업 실행을 시작합니다. 이
루틴은 실행기 시작 중에 호출됩니다. 어떤 작업이든 수행해야 합니다.
실제 테이블 수정 전에 초기화가 필요합니다.
이어서,ExecForeignInsert,
ExecForeignUpdate또는ExecForeignDelete각 튜플에 대해 호출됩니다.
삽입, 업데이트 또는 삭제됩니다.
mtstate전체적인 상태입니다테이블 수정계획 노드가 실행 중입니다.
계획 및 실행 상태에 대한 글로벌 데이터는 다음을 통해 제공됩니다.
이 구조.린포이것은ResultRelInfo대상을 설명하는 구조체
메이저 토토 사이트 테이블. (그ri_FdwState필드
의결과RelInfo다음에 사용할 수 있습니다.
이 작업에 필요한 비공개 상태를 저장하는 FDW입니다.)fdw_private비공개 메이저 토토 사이트가 포함되어 있습니다.
생성자PlanForeign수정, 만약
뭐든지.하위 계획_index어떤 대상을 식별합니다.
의테이블 수정이것은 계획 노드입니다.플래그다음을 설명하는 플래그 비트를 포함합니다.
이 계획 노드에 대한 실행자의 작동 모드입니다.
언제 참고하세요(플래그 &
EXEC_FLAG_EXPLAIN_ONLY)이 사실입니다. 이 함수는
외부적으로 보이는 모든 작업을 수행합니다. 그것은 단지
노드 상태를 유효하게 만드는 데 필요한 최소값ExplainForeignModify그리고EndForeignModify.
만약에BeginForeignModify포인터
으로 설정되었습니다.NULL동안에는 아무 조치도 취하지 않습니다.
실행기 시작.
TupleTableSlot *
ExecForeignInsert(EState *부동산,
ResultRelInfo *rinfo,
TupleTableSlot *슬롯,
TupleTableSlot *planSlot);
외부 테이블에 하나의 튜플을 삽입하십시오.부동산쿼리의 전역 실행 상태입니다.rinfo이것은ResultRelInfo대상을 설명하는 구조체 메이저 토토 사이트 테이블.슬롯튜플을 포함합니다. 삽입되다; 이는 외부의 행 유형 정의와 일치합니다. 테이블.planSlot튜플이 포함되어 있습니다. 에 의해 생성되었습니다.테이블 수정계획 노드의 하위 계획; 와는 다르다슬롯에 추가 내용이 포함될 수 있음"정크"열. (그planSlot일반적으로 관심이 거의 없음삽입경우이지만 완전성을 위해 제공되었습니다.)
반환 값은 이전에 있던 데이터가 포함된 슬롯이거나 실제로 삽입되었습니다(이는 제공된 데이터와 다를 수 있습니다. 예를 들어 트리거 작업의 결과) 또는 행이 없으면 NULL입니다. 실제로 삽입되었습니다(역시 일반적으로 트리거의 결과로). 는 전달됨슬롯이것을 위해 재사용 가능 목적.
반환된 슬롯의 데이터는 다음 경우에만 사용됩니다.삽입쿼리에 다음이 있습니다.돌아오는 중절. 따라서 FDW는 다음을 선택할 수 있습니다. 최적화에 따라 일부 또는 모든 열을 반환합니다. 의 내용돌아오는 중절. 그러나, 성공을 나타내려면 일부 슬롯을 반환해야 합니다. 그렇지 않으면 쿼리의 보고된 행 수가 잘못되었습니다.
만약에ExecForeignInsert포인터
으로 설정되었습니다.NULL, 다음에 삽입하려고 시도합니다.
오류 메시지와 함께 외부 테이블이 실패합니다.
TupleTableSlot *
ExecForeignUpdate(EState *부동산,
ResultRelInfo *rinfo,
TupleTableSlot *슬롯,
TupleTableSlot *planSlot);
외부 테이블에서 하나의 튜플을 업데이트합니다.부동산쿼리의 전역 실행 상태입니다.rinfo이것은ResultRelInfo대상을 설명하는 구조체
메이저 토토 사이트 테이블.슬롯새 메이저 토토 사이트가 포함되어 있습니다
튜플의 경우; 이는 외부의 행 유형 정의와 일치합니다.
테이블.planSlot튜플이 포함되어 있습니다.
에 의해 생성되었습니다.테이블 수정계획
노드의 하위 계획; 와는 다르다슬롯에
추가 내용이 포함될 수 있음"정크"열. 특히 다음에서 요청한 모든 정크 열은AddForeignUpdateTargets될 것이다
이 슬롯에서 사용할 수 있습니다.
반환 값은 행을 그대로 포함하는 슬롯이거나 실제로 업데이트되었습니다(제공된 데이터와 다를 수 있습니다. 예를 들어 트리거 작업의 결과) 또는 행이 없으면 NULL입니다. 실제로 업데이트되었습니다(역시 일반적으로 트리거의 결과로). 는 전달됨슬롯이를 위해 재사용 가능 목적.
반환된 슬롯의 데이터는 다음과 같은 경우에만 사용됩니다.업데이트쿼리에 다음이 있습니다.돌아오는 중절. 따라서 FDW는 다음을 선택할 수 있습니다. 최적화에 따라 일부 또는 모든 열을 반환합니다. 의 내용돌아오는 중절. 그러나, 성공을 나타내려면 일부 슬롯을 반환해야 합니다. 그렇지 않으면 쿼리의 보고된 행 수가 잘못되었습니다.
만약ExecForeignUpdate포인터
으로 설정되었습니다.NULL, 업데이트를 시도합니다.
오류 메시지와 함께 외부 테이블이 실패합니다.
TupleTableSlot *
ExecForeignDelete(EState *부동산,
ResultRelInfo *rinfo,
TupleTableSlot *슬롯,
TupleTableSlot *planSlot);
외부 테이블에서 하나의 튜플을 삭제합니다.부동산는 쿼리에 대한 전역 실행 상태입니다.린포이것은결과RelInfo대상을 설명하는 구조체
메이저 토토 사이트 테이블.슬롯아무것도 포함하지 않음
호출 시 유용하지만 반환된 튜플을 보유하는 데 사용할 수 있습니다.planSlot이러한 튜플을 포함합니다.
에 의해 생성됨테이블 수정계획
노드의 하위 계획; 특히, 여기에는 다음과 같은 모든 정크 칼럼이 포함됩니다.
님이 요청했습니다.AddForeignUpdateTargets. 정크 칼럼은 다음과 같아야 합니다.
삭제할 튜플을 식별하는 데 사용됩니다.
반환 값은 행을 포함하는 슬롯이거나 삭제되었거나 행이 삭제되지 않은 경우 NULL입니다(일반적으로 다음의 결과로 발생). 트리거). 전달된슬롯사용 가능 반환될 튜플을 보유합니다.
반환된 슬롯의 데이터는 다음과 같은 경우에만 사용됩니다.삭제쿼리에 가 있습니다반환 중절. 따라서 FDW는 다음을 선택할 수 있습니다. 최적화에 따라 일부 또는 모든 열을 반환합니다. 의 내용돌아오는 중절. 그러나, 성공을 나타내려면 일부 슬롯을 반환해야 합니다. 그렇지 않으면 쿼리의 보고된 행 수가 잘못되었습니다.
만약에ExecForeignDelete포인터
으로 설정되었습니다.NULL, 다음에서 삭제를 시도합니다.
오류 메시지와 함께 외부 테이블이 실패합니다.
공허
EndForeignModify(EState *부동산,
ResultRelInfo *rinfo);
테이블 업데이트를 종료하고 자원을 해제합니다. 일반적으로 그렇지 않습니다. palloc의 메모리를 해제하는 것이 중요하지만 예를 들어 열린 파일 원격 서버에 대한 연결을 정리해야 합니다.
만약에EndForeignModify포인터는
으로 설정됨NULL동안에는 아무 조치도 취하지 않습니다.
실행기 종료.
정수 IsForeignRelUpdatable(관계 상대);
지정된 외부 테이블의 업데이트 작업을 보고합니다. 지원합니다. 반환 값은 규칙 이벤트의 비트마스크여야 합니다. 외국에서 지원되는 작업을 나타내는 숫자 테이블, 사용하여명령 유형열거; 그 이다,(1 << CMD_UPDATE) = 4for업데이트, (1 << CMD_INSERT) = 8for삽입및(1 << CMD_DELETE) = 16for삭제.
만약에IsForeignRelUpdatable포인터가 다음으로 설정되었습니다.NULL, 외국 테이블은
FDW가 있는 경우 삽입, 업데이트 또는 삭제가 가능한 것으로 가정됩니다.
제공합니다ExecForeignInsert,
ExecForeignUpdate또는ExecForeignDelete각각. 이 기능은
FDW가 업데이트 가능한 일부 테이블을 지원하는 경우에만 필요하며
그렇지 않은 일부. (그래도 오류가 발생하는 것은 허용됩니다.
이 함수를 체크인하는 대신 실행 루틴에서
그러나 이 기능은 업데이트 가능성을 결정하는 데 사용됩니다.
에 표시information_schema조회.)
공허
explainForeignScan(ForeignScanState *노드,
explainState *es);
추가 인쇄설명에 대한 출력
외부 테이블 스캔. 이 함수는 호출할 수 있습니다.ExplainPropertyText및 추가할 관련 함수
필드를설명출력. 깃발
필드es무엇을 결정하는 데 사용할 수 있습니다.
인쇄하고 상태는ForeignScanState노드를 검사하여 다음을 제공할 수 있습니다.
런타임 통계는분석 설명케이스.
만약에ExplainForeignScan포인터
으로 설정되었습니다.NULL, 추가 정보 없음
동안 인쇄됩니다.설명.
공허
explainForeignModify(ModifyTableState *mtstate,
ResultRelInfo *rinfo,
*fdw_private 목록,
int 하위 계획_색인,
구조체 explainState *es);
추가 인쇄설명에 대한 출력
외국 테이블 업데이트. 이 함수는 호출할 수 있습니다.ExplainPropertyText및 추가할 관련 함수
필드를설명출력. 깃발
필드es무엇을 결정하는 데 사용할 수 있습니다.
인쇄하고 상태는수정테이블상태노드를 검사하여 제공할 수 있습니다.
런타임 통계는분석 설명사례. 처음 4개의 인수는 for와 동일합니다.BeginForeignModify.
만약에ExplainForeignModify포인터가 다음으로 설정되었습니다.NULL, 추가 없음
정보는 동안 인쇄됩니다.설명.
부울
AnalyzeForeignTable(관계 관계,
AcquireSampleRowsFunc *func,
BlockNumber *총 페이지 수);
이 함수는 다음과 같은 경우에 호출됩니다.분석은 외부 테이블에서 실행됩니다. 만약에 FDW는 이 외부 테이블에 대한 통계를 수집할 수 있습니다. 반환참, 그리고 테이블에서 샘플 행을 수집하는 함수func및 테이블의 예상 크기 페이지총페이지수. 그렇지 않으면 반환거짓.
FDW가 통계 수집을 지원하지 않는 경우
테이블,외부 테이블 분석포인터는 다음으로 설정될 수 있습니다.NULL.
제공된 경우 샘플 수집 기능에는 다음이 있어야 합니다. 서명
정수
AcquireSampleRowsFunc(관계 관계, int elevel,
HeapTuple *행, int targrows,
이중 *합계,
double *totaldeadrows);
최대 무작위 샘플대상 성장행은 테이블에서 수집되어 발신자 제공행배열. 실제 수집된 행 수가 반환되어야 합니다. 게다가 매장 테이블의 활성 행과 데드 행의 총 개수 추정 출력 매개변수에총계그리고총 교착 상태. (설정총 교착 상태FDW에 아무것도 없으면 0으로 설정 데드 행의 개념.)
| 이전 | 배트맨 토토 : 문서 : 9.3 : 배트맨 토토 9.3.25 문서화 | 다음 |
| 외부 메이저 토토 사이트 래퍼 기능 | 위로 | 외부 메이저 토토 사이트 래퍼 도우미 기능 |