젠 토토 : 문서 : 9.6 : 젠 토토 9.6 | |||
---|---|---|---|
PostgreSQL : 문서 : 9.6 : 외국 데이터 포장지 토토 | PostgreSQL : 문서 : 9.6 : 외국 스포츠 토토 결과 래퍼 쓰기 | 55 장. 외국 토토 사이트 래퍼 쓰기 | PostgreSQL : 문서 : 9.6 : 토토 사이트 추천 데이터 래퍼 도우미 기능 |
FDW 핸들러 함수는 palloc'd를 반환합니다fdwroutine아래에 설명 된 콜백 함수에 포인터를 포함하는 구조. 스캔 관련 기능이 필요하고 나머지는 선택 사항입니다.
thefdwroutinestruct 유형은SRC/포함/토토 사이트/fdwapi.h, 추가 세부 사항을 참조하십시오.
무효 getforeignrelsize (plannerinfo *root, reploptinfo *baserel, oid forexableid);
토토 사이트 표에 대한 관계 크기 추정치를 얻으십시오. 이것은 토토 사이트 테이블을 스캔하는 쿼리 계획을 시작할 때 호출됩니다.루트쿼리에 대한 플래너의 글로벌 정보입니다.Baserel이 표에 대한 플래너의 정보입니다. 그리고토토 사이트인pg_class토토 사이트 테이블의 OID. (토토 사이트인플래너 토토 사이트 구조에서 얻을 수 있지만 노력을 절약하기 위해 명시 적으로 전달됩니다.)
이 기능이 업토토 사이트트되어야합니다Baserel- 행제한에 의해 수행 된 필터링을 설명 한 후 테이블 스캔에 의해 반환 된 예상 행의 수가 되려면. 의 초기 값Baserel- 행는 일정한 기본 추정치 일 뿐이며 가능한 경우 교체해야합니다. 함수는 또한 업토토 사이트트를 선택할 수 있습니다Baserel- 너비평균 결과 행 너비의 더 나은 추정치를 계산할 수있는 경우. (초기 값은 열 토토 사이트 유형과 마지막으로 측정 한 열 평균 폭 값을 기준으로합니다분석.) 또한이 기능이 업토토 사이트트 될 수 있습니다Baserel- Tuples토토 사이트 테이블의 총 행 수에 대한 더 나은 추정치를 계산할 수있는 경우. (초기 값은pg_class.reltuples마지막으로 보이는 총 행 수를 나타냅니다분석.)
참조PostgreSQL : 문서 : 9.6 : 외국 데이터 래퍼 쿼리 토토 결과추가 정보는
무효 getforeignpaths (plannerinfo *루트, reploptinfo *baserel, oid forexableid);
토토 사이트 테이블에서 스캔 할 수있는 액세스 경로를 만듭니다. 이것은 쿼리 계획 중에 호출됩니다. 매개 변수는와 동일합니다.getforeignRelsize
, 이미 호출되었습니다.
이 함수는 하나 이상의 액세스 경로를 생성해야합니다 (토토 사이트 경로노드) 외부 테이블의 스캔을 위해서는 전화해야합니다add_path
그러한 각 경로를 추가하려면Baserel- PathList. 사용하는 것이 좋습니다create_foreignscan_path
구축하려면토토 사이트 경로노드. 함수는 여러 액세스 경로를 생성 할 수 있습니다 (예 : 유효한 경로Pathkeys사전 분류 된 결과를 나타냅니다. 각 액세스 경로에는 비용 추정치가 포함되어야하며 의도 된 특정 스캔 방법을 식별하는 데 필요한 FDW- 민간 정보가 포함될 수 있습니다.
참조PostgreSQL : 문서 : 9.6 : 외국 데이터 래퍼 쿼리 토토 결과추가 정보는
Foreignscan * getforeignplan (plannerinfo *root, reploptinfo *baserel, Oid ForeigntableId, 토토 사이트 경로 *best_path, 목록 *tlist, 목록 *scan_clauses, 계획 *outer_plan);
a 생성Foreignscan선택한 외래 액세스 경로에서 노드를 계획하십시오. 쿼리 계획이 끝날 때 호출됩니다. 매개 변수는입니다.getforeignRelsize
, 선택된토토 사이트 경로(이전에 생산getforeignpaths
, getforeignjoinpaths
또는getforeignupperPaths
), 계획 노드에 의해 방출되는 대상 목록, 계획 노드에 의해 시행 될 제한 조항 및의 외부 하위 비행기Outissscan, 이는 수행 한 재확인에 사용됩니다Recheckforeignscan
. (경로가 기본 관계가 아닌 가입을위한 경우토토 사이트인isInvalidoid.)
이 함수는 a를 생성하고 반환해야합니다.Foreignscan계획 노드; 사용하는 것이 좋습니다make_foreignscan
구축하려면Foreignscan노드.
참조PostgreSQL : 문서 : 9.6 : 외국 데이터 래퍼 쿼리 토토 결과추가 정보는
무효 excernforeignscan (토토 사이트 scanstate *노드, int eflags);
토토 사이트 스캔 실행 시작. 이것은 집행자 스타트 업 동안 호출됩니다. 스캔이 시작되기 전에 필요한 초기화를 수행해야하지만 실제 스캔을 실행하지는 않습니다 (첫 번째 호출시 수행해야합니다ITERATE ForeignScan
). 그만큼ForeignScanstate노드가 이미 생성되었지만 그FDW_STATE필드는 여전히 무효입니다. 스캔 할 테이블에 대한 정보는를 통해 액세스 할 수 있습니다.Outissscanstate노드 (특히 기본에서OutiseScanPlan Node.getforeignplan
).eflags이 계획 노드에 대한 집행자의 운영 모드를 설명하는 플래그 비트가 포함되어 있습니다.
(eflags & exec_flag_explain_only)사실,이 기능은 외부로 가시적 인 행동을 수행해서는 안됩니다. 노드 상태를 유효하게하는 데 필요한 최소 값 만설명 foreignscan
andendforeignscan
.
tupletableslot * 반복적
외래 소스에서 한 줄을 가져와 튜플 테이블 슬롯으로 반환합니다 (노드scantupleslot이 목적으로 사용해야합니다). 더 이상 행을 사용할 수없는 경우 리턴 NULL. 튜플 테이블 슬롯 인프라를 통해 물리적 또는 가상 튜플을 반환 할 수 있습니다. 대부분의 경우 후자의 선택은 성능 관점에서 바람직합니다. 이는 수명이 짧은 메모리 컨텍스트에서 호출 될 수 있습니다. 에서 메모리 컨텍스트 생성tecineforeignscan
수명이 길거나 사용하는 경우es_query_cxt노드의Estate.
반환 된 행은와 일치해야합니다.FDW_SCAN_TLIST대상 목록이 제공된 경우, 그렇지 않으면 스캔되는 외래 테이블의 행 유형과 일치해야합니다. 필요하지 않은 열을 최적화하기로 선택한 경우, 해당 열 위치에 널을 삽입하거나 A를 생성해야합니다.FDW_SCAN_TLIST그 열이 생략 된 상태에서 목록.
참고PostgreSQL의 집행자는 반환 된 행이 외국 테이블에 정의 된 제약을 위반하는지 여부를 신경 쓰지 않지만 플래너는 관리를 수행하고,이 외국 테이블에 선언 된 제약 조건을 충족하지 않는 행이 보이는 경우 쿼리를 잘못 최적화 할 수 있습니다. 사용자가 제약 조건이 사실이라고 선언했을 때 제약 조건을 위반하면 오류를 높이는 것이 적절할 수 있습니다 (데이터 유형 불일치의 경우 필요한대로)..
무효 rescanforeignscan (foreignscanstate *노드);
처음부터 스캔을 다시 시작하십시오. 스캔이 의존하는 매개 변수는 값이 변경되었을 수 있으므로 새 스캔이 반드시 같은 행을 반드시 반환 할 필요는 없습니다.
무효 endforeignscan (foreignscanstate *노드);
스캔 및 릴리스 리소스를 종료하십시오. 일반적으로 Palloc'd 메모리를 해제하는 것은 중요하지 않지만 예를 들어 원격 서버에 대한 열린 파일 및 연결을 정리해야합니다.
FDW가 외국 결합을 원격으로 수행하는 것을 지원하는 경우 (두 테이블의 토토 사이트를 가져오고 로컬로 가입하는 대신)이 콜백 기능을 제공해야합니다.
무효 getforeignjoinpaths (plannerinfo *root, reploptinfo *joinrel, reploptinfo *outerrel, reploptinfo *내부 렐, 공동 타입 공동 유형, joinpathextradata *extra);
모두 동일한 토토 사이트 서버에 속하는 두 개 이상의 토토 사이트 테이블에 가입 할 수있는 액세스 경로를 만듭니다. 이 선택적 기능은 쿼리 계획 중에 호출됩니다. 와 마찬가지로getforeignpaths
,이 함수는 생성해야합니다토토 사이트 경로제공된 사람의 경로joinrel, 그리고 콜add_path
이 경로를 조인을 위해 고려한 경로 세트에 추가합니다. 그러나와는 달리getforeignpaths
,이 기능은 로컬 결합과 관련된 경로가 항상 가능하기 때문에 적어도 하나의 경로를 만드는 데 성공할 필요는 없습니다.
이 함수는 내부 및 외부 관계의 다른 조합과 동일한 결합 관계에 대해 반복적으로 호출 될 것입니다. 복제 된 작업을 최소화하는 것은 FDW의 책임입니다.
if a토토 사이트 경로경로는 조인을 위해 선택되며 전체 조인 프로세스를 나타냅니다. 구성 요소 테이블 및 자회사 조인에 대해 생성 된 경로는 사용되지 않습니다. 결합 경로의 후속 처리는 단일 외래 테이블을 스캔하는 경로와 마찬가지로 진행됩니다. 한 가지 차이점은ScanRelid결과Foreignscan계획 노드는 단일 관계가 나타내지 않기 때문에 0으로 설정해야합니다. 대신,FS_RELIDS필드Foreignscan노드는 결합 된 관계 세트를 나타냅니다. (후자의 필드는 Core Planner 코드에 의해 자동으로 설정되어 FDW에 의해 채워질 필요가 없습니다.) 또 다른 차이점은 시스템 카탈로그에서 원격 조인의 열 목록을 찾을 수 없기 때문에 FDW가 채워야한다는 것입니다.FDW_SCAN_TLIST적절한 목록 포함TargetEntry노드, 반환하는 튜플에서 실행 시간에 공급되는 열 세트를 나타냅니다.
FDW가 원격 집계와 같은 원격 사후 스캔/조인 처리를 지원하는 경우이 콜백 기능을 제공해야합니다.
무효 getforeignupperpaths (plannerinfo *root, 상단 관계 무대, reploptinfo *input_rel, reploptinfo *output_rel);
가능한 액세스 경로 생성상류 관계프로세싱은 집계, 창 함수, 정렬 및 테이블 업토토 사이트트와 같은 모든 스캔 후/조인 쿼리 처리에 대한 플래너의 용어입니다. 이 선택적 기능은 쿼리 계획 중에 호출됩니다. 현재 쿼리에 관련된 모든 기본 관계가 동일한 FDW에 속하는 경우에만 호출됩니다. 이 기능은 생성해야합니다토토 사이트 경로FDW가 원격으로 수행하는 방법을 알고 있고 전화를 알고있는 스캔 후/조인 처리에 대한 경로.add_path
이 경로를 표시된 상위 관계에 추가합니다. 와 마찬가지로getforeignjoinpaths
, 로컬 처리와 관련된 경로가 항상 가능하기 때문에이 기능이 경로를 만드는 데 성공할 필요는 없습니다.
theStage매개 변수는 현재 고려중인 사후/조인 단계를 식별합니다.output_rel이 단계의 계산을 나타내는 경로를 받아야하는 상점은입니다.input_rel는이 단계에 대한 입력을 나타내는 관계입니다. (토토 사이트 경로경로 추가output_rel일반적으로 경로에 직접적인 의존성이 없습니다input_rel, 처리는 외부에서 수행 될 것으로 예상되므로. 그러나 이전 처리 단계를 위해 이전에 생성 된 경로를 검사하는 것은 중복 계획 작업을 피하는 데 유용 할 수 있습니다.)
FDW가 쓰기 가능한 토토 사이트 테이블을 지원하는 경우 FDW의 요구와 기능에 따라 다음 콜백 기능을 제공해야합니다.
무효 addforeignupdateTargets (query *parsetree, rangetblentry *target_rte, 관계 target_relation);
업토토 사이트트and삭제작업은 테이블 스캔 함수에 의해 이전에 가져온 행에 대해 수행됩니다. FDW는 업토토 사이트트 또는 삭제할 정확한 행을 식별 할 수 있도록 행 ID 또는 기본 키 열의 값과 같은 추가 정보가 필요할 수 있습니다. 이를 지원하기 위해이 기능은 숨겨진 추가 또는를 추가 할 수 있습니다."정크", AN 동안 토토 사이트 테이블에서 검색 할 열 목록의 대상 열업토토 사이트트또는삭제.
그렇게하려면 추가TargetEntry항목 toParsetree- TargetList, 추가 값을 가져 오는 표현식을 포함합니다. 그러한 각 항목은 표시되어야합니다resjunk=trueRESNAME실행 시간에이를 식별합니다. 일치하는 이름 사용을 피하십시오CTIDn, Wholerow또는Wholerown24241_24391Eval_Const_Expressions
TargetList에 추가하기 전에.
이 기능은 계획 중에 호출되지만 제공된 정보는 다른 계획 루틴에서 사용할 수있는 정보와 약간 다릅니다.Parsetree업토토 사이트트또는삭제target_rteandtarget_relation대상 토토 사이트 표를 설명합니다.
addforeignupdateTargets
포인터가 설정되었습니다NULL, 추가 대상 표현식이 추가되지 않습니다. (이것은 구현할 수 없게 될 것입니다삭제운영업토토 사이트트FDW가 변하지 않는 기본 키에 의존하여 행을 식별하는 경우에도 여전히 실현 가능할 수 있습니다.)
목록 * planforeignmodify (plannerinfo *root, ModififyTable *계획, 색인 결과, int subplan_index);
외국 테이블에서 삽입, 업토토 사이트트 또는 삭제에 필요한 추가 계획 조치를 수행합니다. 이 함수는에 첨부 될 FDW- 민간 정보를 생성합니다.modifyTable업토토 사이트트 작업을 수행하는 계획 노드. 이 개인 정보는 a의 형태가 있어야합니다.List,teernforeignModify
실행 단계 중.
루트쿼리에 대한 플래너의 글로벌 정보입니다.planmodifyTable계획 노드.fdwprivlists필드ressultrelation범위 테이블 인덱스로 대상 이물 테이블을 식별합니다.subplan_index어떤 대상을 식별합니다modifyTable계획 노드 이것은 0에서 계산됩니다. 색인을 원한다면를 사용하십시오.plan- 계획또는 기타 하위 구조plan노드.
참조PostgreSQL : 문서 : 9.6 : 외국 데이터 래퍼 쿼리 토토 결과추가 정보는
planforeignModify
포인터가 설정되었습니다NULL, 추가 계획 시간 조치가 취하지 않으며fdw_private목록에 전달tearnforeignmodify
NIL이 될 것입니다.
무효 tertoctoreignmodify (modifyTableState *mtstate, rinfo *rinfo, 목록 *fdw_private, int subplan_index, int eflags);
토토 사이트 테이블 수정 작업을 시작하십시오. 이 루틴은 집행자 스타트 업 동안 호출됩니다. 실제 테이블 수정 전에 필요한 초기화를 수행해야합니다. 그후,execforeigninsert
, execforeignupdate
또는execforeigndelete
각 튜플이 삽입, 업토토 사이트트 또는 삭제되도록 요청됩니다.
mtstatemodifyTable실행중인 계획 노드; 계획 및 실행 상태에 대한 글로벌 토토 사이트는이 구조를 통해 사용할 수 있습니다.rinforesultrelinfo대상 외래 테이블을 설명하는 구조. (그만큼RI_FDWSTATE필드resultrelinfoFDW 가이 작업에 필요한 개인 상태를 저장할 수 있습니다.)fdw_privatePlanforeignModify
, 경우.subplan_indexmodifyTable계획 노드입니다.eflags이 계획 노드에 대한 집행자의 작동 모드를 설명하는 플래그 비트가 포함되어 있습니다.
(eflags & exec_flag_explain_only)사실,이 기능은 외부로 가시적 인 동작을 수행해서는 안됩니다. 노드 상태를 유효하게하는 데 필요한 최소 값 만ForeignModify 설명
andendforeignModify
.
초보자 modify
포인터가 설정되었습니다NULL, 집행자 스타트 업 동안 조치를 취하지 않습니다.
TupleTablesLot * execforeigninsert (Estate *Estate, rinfo *rinfo, tupletableslot *슬롯, tupletableslot *planlot);
하나의 튜플을 토토 사이트 테이블에 삽입하십시오.Estate쿼리의 글로벌 실행 상태입니다.rinforesultrelinfo대상 토토 사이트 표를 설명하는 구조.슬롯삽입 할 튜플을 포함합니다. 토토 사이트 테이블의 행 유형 정의와 일치합니다.plantlotmodifyTable계획 노드의 하위 비행; 에서 다릅니다.슬롯추가 포함"정크"열. (그만큼plantlot일반적으로 관심이 거의 없습니다삽입사례이지만 완전성을 위해 제공됩니다.)
반환 값은 실제로 삽입 된 데이터를 포함하는 슬롯입니다 (예 : 트리거 작업의 결과로 제공된 데이터와 다를 수 있음) 또는 실제로 행이 삽입되지 않은 경우 (일반적으로 트리거의 결과). 통과슬롯이 목적으로 재사용 할 수 있습니다.
반환 된 슬롯의 데이터는에만 사용됩니다.삽입Query가 a반환절 또는 외국 테이블에가 있습니다.행 후트리거. 트리거는 모든 열이 필요하지만 FDW는의 내용에 따라 일부 또는 모든 열을 반환하는 것을 최적화하도록 선택할 수 있습니다.반환절. 그럼에도 불구하고 일부 슬롯은 성공을 나타내려면 반환되어야합니다. 그렇지 않으면 쿼리의보고 된 행 카운트가 잘못 될 것입니다.
execforeigninsert
포인터가 설정되었습니다NULL, 오류 메시지와 함께 외국 테이블에 삽입하려는 시도가 실패합니다.
tupletableslot * execforeignupdate (Estate *Estate, rinfo *rinfo, tupletableslot *슬롯, tupletableslot *planlot);
외국 테이블에서 하나의 튜플 업토토 사이트트.Estate쿼리의 글로벌 실행 상태입니다.rinforesultrelinfo대상 토토 사이트 표를 설명하는 구조.슬롯튜플에 대한 새로운 토토 사이트를 포함합니다. 외국 테이블의 행 유형 정의와 일치합니다.plantlotmodifyTableNode의 하위 비행 계획; 에서 다릅니다.슬롯추가 포함"정크"열. 특히, 요청한 모든 정크 열은addforeignupdateTargets
이 슬롯에서 사용할 수 있습니다.
반환 값은 실제로 업토토 사이트트 된 행을 포함하는 슬롯입니다 (예 : 트리거 작업의 결과로 제공된 데이터와 다를 수 있음) 또는 실제로 행이 업토토 사이트트되지 않은 경우 (일반적으로 트리거 결과). 통과슬롯이 목적으로 재사용 할 수 있습니다.
반환 된 슬롯의 데이터는에만 사용됩니다.업토토 사이트트Query가 a반환절 또는 외국 테이블에가 있습니다.after row트리거. 트리거는 모든 열이 필요하지만 FDW는의 내용에 따라 일부 또는 모든 열을 반환하는 것을 최적화하도록 선택할 수 있습니다.반환절. 그럼에도 불구하고 일부 슬롯은 성공을 나타내려면 반환되어야합니다. 그렇지 않으면 쿼리의보고 된 행 카운트가 잘못 될 것입니다.
execforeignupdate
포인터가 설정되었습니다NULL, 오류 메시지로 외국 테이블을 업토토 사이트트하려는 시도가 실패합니다.
tupletableslot * execforeigndelete (Estate *Estate, rinfo *rinfo, tupletableslot *슬롯, tupletableslot *planlot);
외국 테이블에서 튜플 한 튜플을 삭제합니다.Estate쿼리의 글로벌 실행 상태입니다.rinforesultrelinfo대상 토토 사이트 표를 설명하는 구조.슬롯전화시 유용한 것은 포함되지만 반환 된 튜플을 잡는 데 사용될 수 있습니다.plantlotmodifyTable계획 노드의 하위 비행; 특히에 의해 요청 된 모든 정크 열이 운반됩니다.addforeignupdateTargets
. 정크 열을 사용하여 삭제할 튜플을 식별해야합니다.
반환 값은 삭제 된 행을 포함하는 슬롯이거나 행이 삭제되지 않은 경우 (일반적으로 트리거 결과). 통과슬롯튜플을 반환 할 수 있도록 사용할 수 있습니다.
반환 된 슬롯의 데이터는에만 사용됩니다.삭제Query가 a반환절 또는 외국 테이블에가 있습니다.After Row트리거. 트리거는 모든 열이 필요하지만 FDW는의 내용에 따라 일부 또는 모든 열을 반환하는 것을 최적화하도록 선택할 수 있습니다.반환절. 그럼에도 불구하고 일부 슬롯은 성공을 나타내려면 반환되어야합니다. 그렇지 않으면 쿼리의보고 된 행 카운트가 잘못 될 것입니다.
execforeigndelete
포인터가 설정되었습니다NULL, 오류 메시지로 외국 테이블에서 삭제하려는 시도가 실패합니다.
무효 endforeignmodify (Estate *Estate, resultrelinfo *rinfo);
테이블 업토토 사이트트 및 릴리스 리소스를 종료하십시오. 일반적으로 Palloc'd 메모리를 해제하는 것은 중요하지 않지만 예를 들어 원격 서버에 대한 열린 파일 및 연결을 정리해야합니다.
endforeignModify
포인터가 설정되었습니다NULL, 집행자 종료 중에 조치를 취하지 않습니다.
int isforeignrelupdatable (관계 rel);
지정된 외국 테이블이 지원하는 업토토 사이트트 업토토 사이트트 보고서. 반환 값은를 사용하여 외국 테이블에서 어떤 작업을 지원하는지를 나타내는 규칙 이벤트 번호의 약간 마스크 여야합니다.cmdtype열거; 즉,(1 << cmd_update) = 4for업토토 사이트트, (1 << cmd_insert) = 8for삽입및(1 << cmd_delete) = 16for삭제.
isforeignrelupdatable
포인터가 설정되었습니다null, FDW가 제공하는 경우 외국 테이블이 삽입 가능, 업토토 사이트트 가능 또는 삭제 가능한 것으로 가정합니다execforeigninsert
, execforeignupdate
또는execforeigndelete
각각. 이 기능은 FDW가 업토토 사이트트 가능한 일부 테이블과 그렇지 않은 테이블을 지원하는 경우에만 필요합니다. (그럼에도 불구 하고이 함수를 확인하는 대신 실행 루틴에서 오류를 던지는 것이 허용됩니다. 그러나이 기능은에 표시 될 업토토 사이트트 가능성을 결정하는 데 사용됩니다.Information_Schema보기)
대체 인터페이스 세트를 구현하여 일부 삽입, 업토토 사이트트 및 삭제를 최적화 할 수 있습니다. 인서트, 업토토 사이트트 및 삭제에 대한 일반적인 인터페이스는 원격 서버에서 행을 가져온 다음 한 번에 해당 행을 수정합니다. 경우에 따라이 행 바다 접근 방식이 필요하지만 비효율적 일 수 있습니다. 외국 서버가 실제로 검색하지 않고 수정해야 할 행을 결정할 수있는 경우, 작업에 영향을 줄 로컬 구조가없는 경우 (로컬 트리거 또는확인 옵션상위보기의 제약 조건) 그런 다음 전체 작업이 원격 서버에서 수행되도록 물건을 정렬 할 수 있습니다. 아래에 설명 된 인터페이스는 이것을 가능하게합니다.
bool plandirectModify (plannerInfo *root, ModififyTable *계획, 색인 결과, int subplan_index);
원격 서버에서 직접 수정을 실행하는 것이 안전한 지 결정합니다. 그렇다면 반환true이를 위해 계획 조치를 수행 한 후. 그렇지 않으면 return거짓. 이 선택적 기능은 쿼리 계획 중에 호출됩니다. 이 기능이 성공하면BEGINDIRECTMODIFY
, iteratedirectModify
andendDirectModify
대신 실행 단계에서 호출됩니다. 그렇지 않으면, 테이블 수정은 위에서 설명한 테이블 업토토 사이트트 함수를 사용하여 실행됩니다. 매개 변수는와 동일합니다.planforeignModify
.
원격 서버에서 직접 수정을 실행하려면이 기능은 대상 하위 비행기를 A로 다시 작성해야합니다.Outissscan원격 서버에서 직접 수정을 실행하는 계획 노드. 그만큼작동필드Outissscancmdtype적절하게 열거; 즉,CMD_UPDATEfor업토토 사이트트, CMD_INSERTfor삽입및CMD_DELETEfor삭제.
참조PostgreSQL : 문서 : 9.6 : 외국 데이터 래퍼 쿼리 토토 결과추가 정보는
PlandirectModify
포인터가 설정되었습니다NULL, 원격 서버에서 직접 수정을 실행하려는 시도가 없습니다.
무효 BEGINDIRECTMODIFY (OutionsCanstate *노드, int eflags);
원격 서버에서 직접 수정을 실행할 준비. 이것은 집행자 스타트 업 동안 호출됩니다. 직접 수정 전에 필요한 초기화를 수행해야합니다 (첫 번째 호출시 수행해야합니다iteratedirectModify
). 그만큼Outissscanstate노드는 이미 생성되었지만 그FDW_STATE필드는 여전히 널입니다. 수정할 테이블에 대한 정보는를 통해 액세스 할 수 있습니다.Outsecanstate노드 (특히 기본에서OutissscanPlan Node.PlandirectModify
).eflags이 계획 노드에 대한 집행자의 작동 모드를 설명하는 플래그 비트가 포함되어 있습니다.
(eflags & exec_flag_explain_only)사실,이 기능은 외부로 가시적 인 동작을 수행해서는 안됩니다. 노드 상태를 유효하게하는 데 필요한 최소 값 만설명 디렉터
및endDirectModify
.
BEGINDIRECTMODIFY
포인터가 설정되었습니다NULL, 원격 서버에서 직접 수정을 실행하려는 시도가 없습니다.
tupletableslot * iteratedirectModify (forexscanstate *노드);
언제삽입, 업토토 사이트트또는삭제쿼리가 없습니다반환절은 원격 서버에서 직접 수정 한 후 NULL을 반환합니다. 쿼리에 조항이 있으면에 필요한 데이터가 포함 된 한 결과를 가져옵니다.반환계산, 튜플 테이블 슬롯에 반환 (노드scantupleslot이 목적으로 사용해야합니다). 실제로 삽입, 업토토 사이트트 또는 삭제 된 데이터는에 저장해야합니다.es_result_relation_info- ri_projectreturning- pi_exprcontext- ecxt_scantuple노드의Estate. 더 이상 행을 사용할 수없는 경우 리턴 NULL. 이는 수명이 짧은 메모리 컨텍스트에서 호출 될 수 있습니다. 에서 메모리 컨텍스트 생성BEGINDIRECTMODIFY
더 많은 수명 스토리지가 필요한 경우es_query_cxt노드의Estate.
반환 된 행은와 일치해야합니다.FDW_SCAN_TLIST대상 목록이 제공된 경우, 그렇지 않으면 업토토 사이트트되는 외래 테이블의 행 유형과 일치해야합니다. 에 필요하지 않은 페치 열을 최적화하기로 선택한 경우반환계산, 해당 열 위치에 널을 삽입하거나 a를 생성해야합니다.FDW_SCAN_TLIST그 열이 생략 된 상태에서 목록.
쿼리에 조항이 있는지 여부에 관계없이 쿼리의보고 된 행 카운트는 FDW 자체에 의해 증가해야합니다. 쿼리에 조항이 없으면 FDW는에 대한 행 수를 증가시켜야합니다.Outissscanstate노드의분석CASE.
인 경우iteratedirectModify
포인터가 설정되었습니다NULL, 원격 서버에서 직접 수정을 실행하려는 시도가 없습니다.
무효 endDirectModify (OutiseScanstate *노드);
원격 서버에서 직접 수정 한 후 정리하십시오. 일반적으로 Palloc'd 메모리를 해제하는 것은 중요하지 않지만 예를 들어 원격 서버에 대한 열린 파일 및 연결을 정리해야합니다.
인 경우endDirectModify
포인터가 설정되었습니다NULL, 원격 서버에서 직접 수정을 실행하려는 시도는 취하지 않습니다.
FDW가 지원하기를 원한다면늦은 행 잠금(에 설명 된대로PostgreSQL : 문서 : 9.6 : 외국 데이터 포장지에서 행 스포츠 토토), 다음 콜백 함수를 제공해야합니다.
RowmarkType getforeignrowmarktype (rangetblentry *rte, lockclausestrength 강도);
토토 사이트 테이블에 사용할 행 마킹 옵션을보고합니다.RTErangetblentry테이블의 노드 및강도관련성이 요청한 잠금 강도를 설명업토토 사이트트/공유조항이있는 경우. 결과는의 회원이어야합니다.RowmarkTypeEnum Type.
이 함수는 AN에 나타나는 각 토토 사이트 테이블에 대한 쿼리 계획 중에 호출됩니다.업토토 사이트트, 삭제, 또는업토토 사이트트/공유 선택쿼리이며의 대상이 아닙니다업토토 사이트트또는삭제.
getforeignrowmarktype
포인터가 설정되었습니다null,row_mark_copy옵션은 항상 사용됩니다. (이것은Refetchforeignrow
절대 호출되지 않으므로 제공 될 필요는 없습니다.)
참조PostgreSQL : 문서 : 9.6 : 외국 데이터 포장지에서 행 스포츠 토토자세한 내용은
Refetchforeignrow (Estate *Estate, execrowmark *erm, Datum Rowid, bool *업토토 사이트트);
필요한 경우 고정 후 토토 사이트 테이블에서 하나의 튜플을 다시 가져옵니다.Estate쿼리의 글로벌 실행 상태입니다.ermexecrowmark대상 이물질 테이블과 획득 할 행 잠금 유형 (있는 경우)을 설명하는 구조.Rowid튜플을 가져올 튜플을 식별합니다.업토토 사이트트출력 매개 변수입니다.
이 함수는 페치 된 튜플의 palloc 's 사본을 반환해야합니다.NULL행 잠금을 얻을 수없는 경우. 획득 할 행 잠금 유형은에 의해 정의됩니다.ERM- MarkType, 이전에 반환 한 값입니다getforeignrowmarktype
. (row_mark_reference잠금 장치를 얻지 않고 튜플을 다시 가져 오는 것을 의미합니다.row_mark_copy이 루틴에서 결코 보지 못할 것입니다.)
또한*업토토 사이트트로 설정해야합니다true가져온 것이 이전에 얻은 것과 동일한 버전이 아닌 튜플의 업토토 사이트트 된 버전 인 경우. (FDW가 이것에 대해 확신 할 수 없다면 항상 반환true권장됩니다.)
기본적으로 행 잠금을 얻지 못하면 오류가 발생해야합니다. 에이NULL반환은만큼 적합합니다스킵 잠긴옵션은에 의해 지정됩니다.erm- waitpolicy.
theRowidCTID행이 다시 가져 오기 위해 읽은 값. 비록Rowid값은 A로 전달됩니다Datum, 현재는 A 일 수 있습니다.TID. 기능 API는 향후 행 ID의 다른 토토 사이트 유형을 허용 할 수 있기를 희망하여 선택됩니다.
인 경우Refetchforeignrow
포인터가 설정되었습니다null, 오류 메시지로 행을 다시 가져 오려는 시도가 실패합니다.
참조PostgreSQL : 문서 : 9.6 : 외국 데이터 포장지에서 행 스포츠 토토자세한 내용은
bool RECHECKFOREIGNSCAN (OSETIONSCANSTATE *노드, tupleTablesLot *슬롯);
이전에 회복 된 튜플이 여전히 관련 스캔과 일치하고 예선에 가입하고 튜플의 수정 된 버전을 제공 할 수 있음을 다시 확인하십시오. Join Pushdown을 수행하지 않는 외국 토토 사이트 포장지의 경우 일반적으로이를 설정하는 것이 더 편리합니다.NULL대신 설정FDW_RECHECK_QUALS적절하게. 그러나 외부 결합이 밀려 나면 필요한 모든 속성이 존재하더라도 모든 기본 테이블과 관련된 검사를 결과 튜플에 다시 적용하는 것만으로는 충분하지 않습니다. 일부 예선과 일치하지 않더라도 일부 속성이 반환되지 않고 일부 속성이 널로 이동할 수 있기 때문입니다..Recheckforeignscan예선을 다시 확인하고 여전히 만족스럽고 거짓이라면 True를 반환 할 수 있지만 교체 튜플을 제공된 슬롯에 저장할 수도 있습니다..
Join Pushdown을 구현하기 위해 외국 토토 사이트 래퍼는 일반적으로 재확인에만 사용되는 대체 로컬 조인 계획을 구성합니다. 이것은의 외부 하위 플랜이 될 것입니다.Outissscan. 재확인이 필요한 경우,이 하위 플랜을 실행할 수 있고 결과 튜플은 슬롯에 저장 될 수 있습니다. 기본 테이블이 둘 이상의 행을 반환하지 않기 때문에이 계획은 효율적 일 필요는 없습니다. 예를 들어, 모든 결합을 중첩 루프로 구현할 수 있습니다. 함수getExistingLocalJoinPath대체 로컬 조인 계획으로 사용될 수있는 적절한 로컬 조인 경로를 위해 기존 경로를 검색하는 데 사용될 수 있습니다..getExistingLocalJoinPath지정된 조인 관계의 경로 목록에서 모색되지 않은 경로를 검색합니다. (이러한 경로를 찾지 못하면 NULL을 반환합니다.이 경우 외국 데이터 래퍼가 로컬 경로를 자체적으로 구축하거나 해당 조인에 대한 액세스 경로를 만들지 않도록 선택할 수 있습니다.).
무효 foreignscan을 설명 설명 *es);
추가 인쇄설명토토 사이트 테이블 스캔의 출력. 이 기능은 호출 할 수 있습니다설명 프로페티 텍스트
및 필드를 추가하는 관련 기능설명출력. 깃발 필드es인쇄 할 내용과 상태를 결정하는 데 사용될 수 있으며Outissscanstate노드를 검사하여 런타임 통계를 제공 할 수 있습니다분석CASE.
설명 foreignscan
포인터가 설정되었습니다null, 추가 정보가 인쇄되지 않음설명.
무효 foreignModify 설명 (modifyTableState *mtstate, rinfo *rinfo, 목록 *fdw_private, int subplan_index, structstate *es);
추가 인쇄설명외국 테이블 업토토 사이트트의 출력. 이 기능은 호출 할 수 있습니다설명 프 로퍼 타입 텍스트
및 필드를 추가하는 관련 함수설명출력. 깃발 필드es인쇄 할 내용과 상태를 결정하는 데 사용될 수 있습니다.ModifyTableState노드를 검사하여 런타임 통계를 제공 할 수 있습니다분석케이스. 처음 네 가지 인수는와 동일합니다.tearnforeignmodify
.
설명 foreignModify
포인터가 설정되었습니다null, 추가 정보가 인쇄되지 않음설명.
무효 설명 directModify (OutiseScanstate *노드, 설명 *es);
추가 인쇄설명원격 서버에서 직접 수정하려는 출력. 이 기능은 호출 할 수 있습니다설명 프 로퍼 타입 텍스트
및 필드를 추가하는 관련 기능설명출력. 깃발 필드es인쇄 할 내용과 상태를 결정하는 데 사용될 수 있으며Outissscanstate노드를 검사하여 런타임 통계를 제공 할 수 있습니다분석CASE.
설명 디렉토리화
포인터가 설정되었습니다NULL, 추가 정보가 인쇄되지 않음설명.
bool Analyzeforeigntable (관계 관계, arceSamplerowsFunc *func, BlockNumber *TotalPages);
이 함수는 다음에 호출됩니다PostgreSQL : 문서 : 9.6 : 윈 토토는 외국 테이블에서 실행됩니다. FDW 가이 외국 테이블에 대한 통계를 수집 할 수 있다면 반환해야합니다truefunc, 그리고 페이지에서 테이블의 예상 크기TotalPages. 그렇지 않으면 returnfalse.
FDW가 테이블에 대한 통계 수집을 지원하지 않으면AnalyzeForeignTable
포인터를 설정할 수 있습니다null.
제공된 경우 샘플 수집 기능에 서명이 있어야합니다
int AcquireSamplerowsFunc (관계 관계, int elevel, 무거운 *행, int targrows, 이중 *Totalrows, Double *Totaldeadrows);
최대의 무작위 샘플Targrows행을 테이블에서 수집하고 발신자 제공에 저장해야합니다행배열. 수집 된 실제 행 수를 반환해야합니다. 또한 테이블의 총 라이브 및 데드 행의 총 수에 대한 추정치를 출력 매개 변수로 저장하십시오.Totalrows및TotalDeadrows. (세트TotalDeadrowsFDW에 데드 행의 개념이없는 경우 0까지.)
목록 * importforeignschema (importforeignschemastmt *stmt, oid serveroid);
토토 사이트 테이블 생성 명령 목록을 얻습니다. 이 기능은 실행할 때 호출됩니다PostgreSQL :, 그리고 해당 진술의 구문 분석 트리와 사용할 외국 서버의 OID가 전달됩니다. 그것은 c 문자열 목록을 반환해야하며, 각각은 A를 포함해야합니다.PostgreSQL : 문서 : 9.6 : 외국 메이저 토토 사이트 만들기명령. 이 문자열은 핵심 서버에서 구문 분석하고 실행됩니다.
내에서importforeignschemastmtstruct,Remote_schema테이블을 가져올 원격 스키마의 이름입니다.list_type테이블 이름을 필터링하는 방법을 식별합니다 :fdw_import_schema_all원격 스키마의 모든 테이블을 가져와야 함을 의미합니다 (이 경우table_list비어 있음),FDW_IMPORT_SCHEMA_LIMIT_TO에 나열된 테이블 만 포함한다는 의미table_list및FDW_IMPORT_SCHEMA_EXCEPT나열된 테이블을 제외하는 것을 의미합니다.table_list. 옵션는 가져 오기 프로세스에 사용되는 옵션 목록입니다. 옵션의 의미는 FDW에 달려 있습니다. 예를 들어, FDW는 옵션을 사용하여를 정의 할 수 있습니다.NOT NULL열의 속성을 가져와야합니다. 이러한 옵션은 FDW에서 데이터베이스 개체 옵션으로 지원하는 것과 관련이 없습니다.
FDW가 무시할 수 있습니다local_schema필드importforeignschemastmt55919_55999토토 사이트 테이블 만들기명령.
FDW는 |list_type및table_list, Core Server가 해당 옵션에 따라 제외 된 테이블에 대한 반환 된 명령을 자동으로 건너 뜁니다. 그러나 처음에는 제외 된 테이블에 대한 명령을 만드는 작업을 피하는 것이 종종 유용합니다. 함수isimportable foreigntable ()
주어진 이물질 이름이 필터를 전달하는지 여부를 테스트하는 데 유용 할 수 있습니다.
FDW가 테이블 정의 가져 오기를 지원하지 않으면importforeignschema
포인터를 설정할 수 있습니다NULL.
aOutiseScan노드는 선택적으로 병렬 실행을 지원할 수 있습니다. 평행OutiseScan여러 프로세스에서 실행되며 모든 협력 프로세스에서 각 행을 한 번만 반환해야합니다. 이를 위해 프로세스는 동적 공유 메모리의 고정 크기 덩어리를 통해 조정할 수 있습니다. 이 공유 메모리는 모든 프로세스에서 동일한 주소로 매핑되는 것을 보장하지 않으므로 포인터를 사용할 수 없습니다. 다음 콜백은 일반적으로 선택 사항이지만 병렬 실행을 지원하는 경우 필요합니다.
bool isforeignscanparallellelafe (plannerinfo *root, repiptinfo *rel, rangetblentry *rte);
병렬 작업자 내에서 스캔을 수행 할 수 있는지 테스트합니다. 이 기능은 플래너가 병렬 계획이 가능할 수 있다고 생각할 때만 호출되며 해당 스캔이 병렬 작업자 내에서 실행되기에 안전한 경우 TRUE를 반환해야합니다. 근로자의 데이터와의 연결이 어떻게 든 리더와 동일한 트랜잭션 컨텍스트를 공유하도록 이루어질 수 없다면 원격 데이터 소스에 트랜잭션 의미론이있는 경우 일반적으로 그렇지 않습니다.
이 콜백이 정의되지 않으면 스캔은 병렬 리더 내에서 발생해야한다고 가정합니다. True를 반환한다고해서 스캔 자체가 병렬로 수행 할 수 있음을 의미하지는 않습니다. 스캔은 병렬 작업자 내에서만 수행 될 수 있습니다. 따라서 병렬 실행이 지원되지 않더라도이 방법을 정의하는 것이 유용 할 수 있습니다.
크기 추정 된 SMFOREIGNSCAN (OSETIONSCANSTATE *노드, PARMALLCONTEXT *PCXT);
병렬 작업에 필요한 동적 공유 메모리의 양을 추정하십시오. 이것은 실제로 사용될 금액보다 높을 수 있지만 더 낮아서는 안됩니다. 반환 값은 바이트입니다.
무효 초기화 된 SMFOREIGNSCAN (OutiseScanstate *노드, ParallelContext *PCXT, 무효 *좌표);
병렬 작업에 필요한 동적 공유 메모리 초기화;좌표ret추정 MFOREIGSSCAN
.
무효 InitializeworkerForeignScan (OutiseScanstate *노드, SHM_TOC *TOC, 무효 *좌표);
|초기화 MFEOREIGSCAN. 이 콜백은 선택 사항 이며이 사용자 지정 경로가 병렬 실행을 지원하는 경우에만 제공됩니다.