이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

57.2. 스포츠 토토 베트맨 데이터 래퍼 콜백 루틴

FDW 핸들러 함수는 palloc'd를 반환합니다fdwroutine아래에 설명 된 콜백 함수에 포인터를 포함하는 구조. 스캔 관련 기능이 필요하고 나머지는 선택 사항입니다.

thefdwroutinestruct 유형은SRC/포함/스포츠 토토 베트맨/fdwapi.h, 추가 세부 사항을 참조하십시오.

57.2.1. 스포츠 토토 베트맨 테이블 스캔을위한 FDW 루틴

무효

스포츠 토토 베트맨 표에 대한 관계 크기 추정치를 얻습니다. 이것은 스포츠 토토 베트맨 테이블을 스캔하는 쿼리 계획을 시작할 때 호출됩니다.루트쿼리에 대한 플래너의 글로벌 정보입니다.Baserel이 테이블에 대한 플래너의 정보입니다. 그리고스포츠 토토 베트맨인pg_class스포츠 토토 베트맨 테이블의 OID. (스포츠 토토 베트맨인플래너 데이터 구조에서 얻을 수 있지만 노력을 절약하기 위해 명시 적으로 전달됩니다.)

이 기능이 업데이트되어야합니다Baserel-> 행제한에 의해 수행 된 필터링을 설명 한 후 테이블 스캔에 의해 반환 된 예상 행의 수가 되려면. 의 초기 값Baserel-> 행는 일정한 기본 추정치 일 뿐이며 가능한 경우 교체해야합니다. 함수는 또한 업데이트를 선택할 수 있습니다Baserel-> 너비평균 결과 행 너비의 더 나은 추정치를 계산할 수있는 경우. (초기 값은 열 데이터 유형과 마지막으로 측정 한 열 평균 폭 값을 기준으로합니다분석.) 또한이 기능이 업데이트 될 수 있습니다Baserel-> Tuples스포츠 토토 베트맨 테이블의 총 행 수에 대한 더 나은 추정치를 계산할 수있는 경우. (초기 값은pg_class.reltuples마지막으로 보이는 총 행 수를 나타냅니다분석.)

참조PostgreSQL : 문서 : 11 : 57.4. 외국 데이터 포장 쿼리 스포츠 토토 결과추가 정보는

무효

스포츠 토토 베트맨 테이블에서 스캔 할 수있는 액세스 경로를 만듭니다. 이것은 쿼리 계획 중에 호출됩니다.getforeignRelsize, 이미 호출되었습니다.

이 함수는 하나 이상의 액세스 경로를 생성해야합니다 (스포츠 토토 베트맨 경로노드) 외부 테이블의 스캔을 위해서는 전화해야합니다add_path그러한 각 경로를 추가하려면Baserel-> PathList. 사용하는 것이 좋습니다create_foreignscan_path빌드하려면스포츠 토토 베트맨 경로노드. 함수는 여러 액세스 경로를 생성 할 수 있습니다 (예 : 유효한 경로Pathkeys사전 분류 된 결과를 나타냅니다. 각 액세스 경로에는 비용 추정치가 포함되어야하며 의도 된 특정 스캔 방법을 식별하는 데 필요한 FDW- 민간 정보가 포함될 수 있습니다.

참조PostgreSQL : 문서 : 11 : 57.4. 외국 데이터 포장 쿼리 스포츠 토토 결과추가 정보는

Outissscan *

생성Foreignscan선택한 외래 액세스 경로에서 노드를 계획하십시오. 쿼리 계획이 끝날 때 호출됩니다.getforeignRelsize, 선택한스포츠 토토 베트맨 경로(이전에 생산getforeignpaths, getforeignjoinpaths또는getforeignupperPaths), 계획 노드에 의해 방출 될 대상 목록, 계획 노드에 의해 시행 될 제한 조항 및의 외부 하위 계획Foreignscan, 이는에 사용되는 재확인에 사용됩니다Recheckforeignscan. (경로가 기본 관계가 아닌 가입을위한 경우스포츠 토토 베트맨인isInvalidoid.)

이 함수는 a를 생성하고 반환해야합니다.Foreignscan계획 노드; 사용하는 것이 좋습니다make_foreignscan빌드하려면Foreignscan노드.

참조PostgreSQL : 문서 : 11 : 57.4. 외국 데이터 포장 쿼리 스포츠 토토 결과추가 정보는

무효

​​스포츠 토토 베트맨 스캔 실행 시작. 이것은 집행자 스타트 업 동안 호출됩니다.ITREARTEFOREIGNSCAN). 그만큼ForeignScanstate노드는 이미 생성되었지만 그FDW_STATE필드는 여전히 널입니다. 스캔 할 테이블에 대한 정보는를 통해 액세스 할 수 있습니다.ForeignScanstate노드 (특히 기본에서ForeignscanPlan Node.getforeignplan). eflags이 계획 노드에 대한 집행자의 운영 모드를 설명하는 플래그 비트가 포함되어 있습니다.

(eflags & exec_flag_explain_only)사실,이 함수는 외부로 가시적 인 행동을 수행해서는 안됩니다. 노드 상태를 유효하게하는 데 필요한 최소 값 만설명 foreignscanandendforeignscan.

tupletableslot *

스포츠 토토 베트맨 소스에서 한 줄을 가져와 튜플 테이블 슬롯으로 반환합니다 (노드Scantupleslot이 목적으로 사용해야합니다). 더 이상 행을 사용할 수없는 경우 리턴 NULL.tecineforeignscan더 많은 수명 저장이 필요한 경우es_query_cxt노드의Estate.

반환 된 행은와 일치해야합니다.FDW_SCAN_TLIST대상 목록이 제공된 경우, 그렇지 않으면 스캔되는 외래 테이블의 행 유형과 일치해야합니다. 필요하지 않은 열을 최적화하기로 선택한 경우, 해당 열 위치에 널을 삽입하거나 A를 생성해야합니다.FDW_SCAN_TLIST그 열이 생략 된 상태에서 목록.

참고PostgreSQL의 집행자는 반환 된 행이 외국 테이블에 정의 된 모든 제약을 위반하는지 여부를 신경 쓰지 않지만 플래너는 관리를 수행하고,이 외국 테이블에 선언 된 제약 조건을 충족하지 않는 행이 보이는 경우 쿼리를 잘못 최적화 할 수 있습니다. 사용자가 제약 조건이 사실이라고 선언했을 때 제약 조건을 위반하면 오류를 높이는 것이 적절할 수 있습니다 (데이터 유형 불일치의 경우 필요한대로)..

무효

처음부터 스캔을 다시 시작하십시오. 스캔이 의존하는 매개 변수는 값이 변경되었을 수 있으므로 새 스캔이 반드시 같은 행을 반드시 반환 할 필요는 없습니다.

무효

스캔 및 릴리스 리소스를 종료하십시오. 일반적으로 Palloc'd 메모리를 해제하는 것은 중요하지 않지만 예를 들어 원격 서버에 대한 열린 파일 및 연결을 정리해야합니다.

57.2.2. 스포츠 토토 베트맨 조인을 스캔하기위한 FDW 루틴

FDW가 스포츠 토토 베트맨인 결합을 원격으로 수행하는 것을 지원하는 경우 (두 테이블의 데이터를 가져오고 로컬로 결합하는 것이 아니라)이 콜백 기능을 제공해야합니다..

무효

모두 동일한 스포츠 토토 베트맨 서버에 속하는 두 개 이상의 스포츠 토토 베트맨 테이블에 가입 할 수있는 액세스 경로를 만듭니다. 이 선택적 기능은 쿼리 계획 중에 호출됩니다.getforeignpaths,이 함수는 생성해야합니다스포츠 토토 베트맨 경로제공된 사람의 경로joinrel및 Calladd_path조인을 위해 고려 된 경로 세트에 이러한 경로를 추가합니다. 그러나와는 달리getforeignpaths,이 기능은 로컬 결합과 관련된 경로가 항상 가능하기 때문에 하나 이상의 경로를 만드는 데 성공할 필요는 없습니다.

이 함수는 내부 및 외부 관계의 다른 조합과 동일한 결합 관계에 대해 반복적으로 호출 될 것입니다. 복제 된 작업을 최소화하는 것은 FDW의 책임입니다.

a스포츠 토토 베트맨 경로경로는 조인을 위해 선택되며 전체 조인 프로세스를 나타냅니다. 구성 요소 테이블 및 자회사 조인에 대해 생성 된 경로는 사용되지 않습니다.ScanRelid결과의Foreignscan계획 노드는 단일 관계가 없기 때문에 0으로 설정해야합니다. 대신,FS_RELIDS필드Foreignscan노드는 결합 된 관계 세트를 나타냅니다. (후자의 필드는 Core Planner 코드에 의해 자동으로 설정되어 FDW에 의해 채워질 필요가 없습니다.) 또 다른 차이점은 시스템 카탈로그에서 원격 조인의 열 목록을 찾을 수 없기 때문에 FDW가 채워야한다는 것입니다.FDW_SCAN_TLIST적절한 목록 포함TargetEntry노드, 노드 세트를 나타냅니다.

참조PostgreSQL : 문서 : 11 : 57.4. 외국 데이터 포장 쿼리 스포츠 토토 결과추가 정보는

57.2.3. 스캔 후/조인 처리를위한 FDW 루틴

FDW가 원격 집계와 같은 원격 사후 스캔/조인 처리 수행을 지원하는 경우이 콜백 기능을 제공해야합니다.

무효

가능한 액세스 경로 생성상류 관계프로세싱은 집계, 창 함수, 정렬 및 테이블 업데이트와 같은 모든 스캔 후/조인 쿼리 처리에 대한 플래너의 용어입니다. 이 선택적 기능은 쿼리 계획 중에 호출됩니다.스포츠 토토 베트맨 경로FDW가 원격으로 수행하는 방법을 알고 있고 호출하는 방법을 알고있는 스캔 후/조인 처리에 대한 경로.add_path이 경로를 표시된 상지 관계에 추가합니다. 와 마찬가지로getforeignjoinpaths,이 기능은 로컬 처리와 관련된 경로가 항상 가능하기 때문에 경로를 만드는 데 성공할 필요는 없습니다.

theStage매개 변수는 현재 고려중인 사후/조인 단계를 식별합니다.output_rel이 단계의 계산을 나타내는 경로를 받아야하는 상점 관계입니다.input_rel는이 단계에 대한 입력을 나타내는 관계입니다. 그만큼추가매개 변수는 추가 세부 정보를 제공합니다. 현재는에 대해서만 설정됩니다Upperrel_Partial_group_agg또는Upperrel_group_agg,이 경우 A를 가리 킵니다.GroupPathExtradata구조. (스포츠 토토 베트맨 경로경로 추가output_rel일반적으로 경로에 직접적인 의존성이 없습니다input_rel, 처리는 외부에서 수행 될 것으로 예상되므로. 그러나 이전 처리 단계를 위해 이전에 생성 된 경로를 검사하는 것은 중복 계획 작업을 피하는 데 유용 할 수 있습니다.)

참조PostgreSQL : 문서 : 11 : 57.4. 외국 데이터 포장 쿼리 스포츠 토토 결과추가 정보는

57.2.4. 스포츠 토토 베트맨 테이블 업데이트를위한 FDW 루틴

FDW가 쓰기 가능한 외국 테이블을 지원하는 경우 FDW의 요구와 기능에 따라 다음 콜백 기능 중 일부 또는 전부를 제공해야합니다.

무효

업데이트and삭제작업은 테이블 스캔 함수에 의해 이전에 가져온 행에 대해 수행됩니다. FDW는 업데이트 또는 삭제할 정확한 행을 식별 할 수 있도록 행 ID 또는 기본 키 열의 값과 같은 추가 정보가 필요할 수 있습니다.정크, an 동안 스포츠 토토 베트맨 테이블에서 검색 할 열 목록의 대상 열업데이트또는삭제.

그렇게하려면 추가TargetEntry항목 toParsetree-> TargetList, 추가 값을 가져 오는 표현식을 포함합니다. 그러한 각 항목은 표시되어야합니다Resjunk = TrueResname실행 시간에이를 식별합니다. 일치하는 이름 사용을 피하십시오CTIDN, Wholerow또는WholerowN22582_22729Eval_Const_ExpressionsTargetList에 추가하기 전에.

이 기능은 계획 중에 호출되지만 제공된 정보는 다른 계획 루틴과 약간 다릅니다.Parsetree업데이트또는삭제명령, whiletarget_rteandtarget_relation대상 외국 표를 설명합니다.

addforeignupdatetArgets포인터가 설정되었습니다NULL, 추가 대상 표현이 추가되지 않습니다. (이것은 구현할 수 없게 될 것입니다삭제운영업데이트FDW가 변하지 않는 기본 키에 의존하여 행을 식별하는 경우에도 여전히 실현 가능할 수 있습니다.)

목록 *

외국 테이블에서 삽입, 업데이트 또는 삭제에 필요한 추가 계획 조치를 수행합니다. 이 함수는에 첨부 될 FDW- 민간 정보를 생성합니다.modifyTable업데이트 작업을 수행하는 계획 노드. 이 개인 정보는 a의 형태가 있어야합니다.ListearchneforeignModify실행 단계 중.

루트쿼리에 대한 플래너의 글로벌 정보입니다.planmodifyTable계획 노드,를 제외하고 완료됩니다fdwprivlists필드ressultrelation범위 테이블 인덱스로 대상 이물 테이블을 식별합니다.subplan_indexmodifyTable계획 노드 이것은 0에서 계산됩니다. 색인을 원한다면를 사용하십시오.plan-> 계획또는 기타 하위 구조plan노드.

참조PostgreSQL : 문서 : 11 : 57.4. 외국 데이터 포장 쿼리 스포츠 토토 결과추가 정보는

PlanforeignModify포인터가 설정되었습니다NULL, 추가 계획 시간 조치가 취하지 않으며fdw_private목록 제공earchneforeignModify

무효

스포츠 토토 베트맨 테이블 수정 작업을 시작하십시오. 이 루틴은 집행자 스타트 업 동안 호출됩니다.execforeigninsert, execforeignupdate또는execforeigndelete각 튜플이 삽입, 업데이트 또는 삭제되도록 요청됩니다.

mtstatemodifyTable실행중인 계획 노드; 계획 및 실행 상태에 대한 글로벌 데이터는이 구조를 통해 사용할 수 있습니다.Rinforesultrelinfo대상 외래 테이블을 설명하는 구조. (그만큼RI_FDWSTATE필드resultrelinfoFDW 가이 작업에 필요한 개인 상태를 저장할 수 있습니다.)fdw_private|PlanforeignModify, 경우.subplan_indexmodifyTable계획 노드입니다.eflags이 계획 노드에 대한 집행자의 운영 모드를 설명하는 플래그 비트가 포함되어 있습니다.

(eflags & exec_flag_explain_only)사실,이 함수는 외부로 가시적 인 행동을 수행해서는 안됩니다. 노드 상태를 유효하게하는 데 필요한 최소 값 만설명 foreignModifyandendforeignModify.

earchneforeignModify포인터가 설정되었습니다NULL, 집행자 스타트 업 동안 조치를 취하지 않습니다.

tupletableslot *

하나의 튜플을 스포츠 토토 베트맨 테이블에 삽입하십시오.Estate쿼리의 글로벌 실행 상태입니다.Rinforesultrelinfo대상 외국 표를 설명하는 구조.슬롯삽입 할 튜플을 포함합니다. 스포츠 토토 베트맨 테이블의 행 유형 정의와 일치합니다.plantlotmodifyTable계획 노드의 하위 비행; 에서 다릅니다.슬롯가능성이 추가정크열. (그만큼plantlot일반적으로에 대한 관심은 거의 없습니다.삽입사례이지만 완전성을 위해 제공됩니다.)

반환 값은 실제로 삽입 된 데이터를 포함하는 슬롯입니다 (예 : 트리거 작업의 결과로 제공된 데이터와 다를 수 있음) 또는 실제로 행이 삽입되지 않은 경우 (일반적으로 트리거의 결과). 통과슬롯이 목적으로 재사용 할 수 있습니다.

반환 된 슬롯의 데이터는에만 사용됩니다.삽입Query가 a반환절 또는 외국 테이블에가 있습니다.행 후트리거. 트리거는 모든 열이 필요하지만 FDW는의 내용에 따라 일부 또는 모든 열을 반환하는 것을 최적화하도록 선택할 수 있습니다.반환절. 그럼에도 불구하고 일부 슬롯은 성공을 나타내려면 반환되어야합니다. 그렇지 않으면 쿼리의보고 된 행 카운트가 잘못 될 것입니다.

execforeigninsert포인터가 설정되었습니다NULL, 오류 메시지와 함께 외국 테이블에 삽입하려는 시도가 실패합니다.

이 기능은 라우팅 된 튜플을 외국 테이블 파티션에 삽입하거나 실행할 때도 호출됩니다복사스포츠 토토 베트맨 테이블에서,이 경우와 다른 방식으로 호출됩니다삽입케이스. FDW가이를 지원할 수 있도록 아래에 설명 된 콜백 함수를 참조하십시오.

tupletableslot *

외국 테이블에서 하나의 튜플 업데이트.Estate쿼리의 글로벌 실행 상태입니다.Rinforesultrelinfo대상 외국 표를 설명하는 구조.슬롯튜플에 대한 새로운 데이터를 포함합니다. 스포츠 토토 베트맨 테이블의 행 유형 정의와 일치합니다.plantlotmodifyTable계획 노드의 하위 비행; 에서 다릅니다.슬롯가능성이 추가정크열. 특히, 요청한 모든 정크 열은addforeignupdatetArgets이 슬롯에서 사용할 수 있습니다.

반환 값은 실제로 업데이트 된 행을 포함하는 슬롯입니다 (예 : 트리거 조치의 결과로 제공된 데이터와 다를 수 있음) 또는 실제로 행이 업데이트되지 않은 경우 (일반적으로 트리거의 결과). 통과슬롯이 목적으로 재사용 할 수 있습니다.

반환 된 슬롯의 데이터는에만 사용됩니다.업데이트Query가 a반환절 또는 외국 테이블에가 있습니다.행 후트리거. 트리거는 모든 열이 필요하지만 FDW는의 내용에 따라 일부 또는 모든 열을 반환하는 것을 최적화하도록 선택할 수 있습니다.반환절. 그럼에도 불구하고 일부 슬롯은 성공을 나타내려면 반환되어야합니다. 그렇지 않으면 쿼리의보고 된 행 카운트가 잘못 될 것입니다.

execforeignupdate포인터가 설정되었습니다NULL, 오류 메시지로 외국 테이블을 업데이트하려는 시도가 실패합니다.

TupleTablesLot *

외래 테이블에서 하나의 튜플을 삭제합니다.Estate쿼리의 글로벌 실행 상태입니다.Rinforesultrelinfo대상 외국 표를 설명하는 구조.슬롯전화시 유용한 것은 포함되지만 반환 된 튜플을 잡는 데 사용될 수 있습니다.plantlotmodifyTable계획 노드의 하위 비행; 특히에 의해 요청 된 모든 정크 열이 운반됩니다.addforeignupdatetArgets. 정크 열을 사용하여 삭제할 튜플을 식별해야합니다.

반환 값은 삭제 된 행을 포함하는 슬롯이거나 행이 삭제되지 않은 경우 (일반적으로 트리거의 결과)입니다. 통과슬롯튜플을 반환 할 수 있도록 사용할 수 있습니다.

반환 된 슬롯의 데이터는에만 사용됩니다.삭제Query가 a반환절 또는 외국 테이블에가 있습니다.행 후트리거. 트리거는 모든 열이 필요하지만 FDW는의 내용에 따라 일부 또는 모든 열을 반환하는 것을 최적화하도록 선택할 수 있습니다.반환절. 그럼에도 불구하고 일부 슬롯은 성공을 나타내려면 반환되어야합니다. 그렇지 않으면 쿼리의보고 된 행 카운트가 잘못 될 것입니다.

execforeigndelete포인터가 설정되었습니다NULL, 오류 메시지와 함께 외국 테이블에서 삭제하려는 시도가 실패합니다.

무효

테이블 업데이트 및 릴리스 리소스를 종료하십시오. 일반적으로 Palloc'd 메모리를 해제하는 것은 중요하지 않지만 예를 들어 원격 서버에 대한 열린 파일 및 연결을 정리해야합니다.

endforeignModify포인터가 설정되었습니다NULL, 집행자 종료 중에 조치를 취하지 않습니다.

튜플이 분할 된 테이블에 삽입 된 튜플삽입또는복사파티션으로 라우팅됩니다. FDW가 라우팅 가능한 외국 테이블 파티션을 지원하는 경우 다음 콜백 기능도 제공해야합니다.복사스포츠 토토 베트맨 표에서 실행됩니다.

무효

외국 테이블에서 삽입 작업 실행을 시작합니다. 이 루틴은 튜플 라우팅을 위해 선택된 파티션과 A에 지정된 대상이 될 때 첫 번째 튜플이 외래 테이블에 삽입되기 직전에 호출됩니다.복사명령. 실제 삽입 전에 필요한 초기화를 수행해야합니다.execforeigninsert각 튜플을 외국 표에 삽입하도록 요구됩니다.

mtstatemodifyTable실행중인 계획 노드; 계획 및 실행 상태에 대한 글로벌 데이터는이 구조를 통해 사용할 수 있습니다.Rinforesultrelinfo대상 외래 테이블을 설명하는 구조. (그만큼RI_FDWSTATE필드resultrelinfoFDW 가이 작업에 필요한 개인 상태를 저장할 수 있습니다.)

이것이 A에 의해 호출되는 경우복사명령, 계획 관련 글로벌 데이터의mtstate제공되지 않고plantlot매개 변수execforeigninsert그 후 삽입 된 각 튜플은NULL, 외국 테이블이 튜플 라우팅을 위해 선택된 파티션인지 또는 명령에 지정된 대상이든

초보자포인터가 설정되었습니다NULL, 초기화에 대한 조치가 취하지 않습니다.

FDW가 라우팅 가능한 외국 테이블 파티션 및/또는 실행을 지원하지 않는 경우복사외국 테이블 에서이 기능 또는execforeigninsert이후에 필요에 따라 오류가 발생해야합니다.

무효

삽입 작업 및 릴리스 리소스를 종료하십시오. 일반적으로 Palloc'd 메모리를 해제하는 것은 중요하지 않지만 예를 들어 원격 서버에 대한 열린 파일 및 연결을 정리해야합니다.

endforeigninsert포인터가 설정되었습니다NULL, 종료에 대한 조치가 취하지 않습니다.

int

지정된 외국 테이블이 지원하는 업데이트 업데이트 보고서. 반환 값은를 사용하여 외국 테이블에서 어떤 작업을 지원하는지를 나타내는 규칙 이벤트 번호의 약간 마스크 여야합니다.cmdtype열거; 즉,(1 << cmd_update) = 4for업데이트, (1 << cmd_insert) = 8for삽입(1 << cmd_delete) = 16for삭제.

iSforeignrelupdatable포인터가 설정되었습니다NULL, FDW가 제공하는 경우 외국 테이블은 삽입 가능, 업데이트 가능 또는 삭제 가능한 것으로 가정합니다execforeigninsert, execforeignupdate또는execforeigndelete각각. 이 기능은 FDW가 업데이트 가능한 일부 테이블과 그렇지 않은 테이블을 지원하는 경우에만 필요합니다.Information_Schema보기)

대체 인터페이스 세트를 구현하여 일부 삽입, 업데이트 및 삭제를 최적화 할 수 있습니다. 인서트, 업데이트 및 삭제에 대한 일반적인 인터페이스는 원격 서버에서 행을 가져온 다음 한 번에 해당 행을 수정합니다.확인 옵션상위보기의 제약 조건) 그런 다음 전체 작업이 원격 서버에서 수행되도록 물건을 정렬 할 수 있습니다. 아래에 설명 된 인터페이스는 이것을 가능하게합니다.

bool

원격 서버에서 직접 수정을 수행하는 것이 안전한 지 결정합니다. 그렇다면 반환True그에 필요한 계획 조치를 수행 한 후. 그렇지 않으면 returnfalse. 이 선택적 기능은 쿼리 계획 중에 호출됩니다.BEGINDIRECTMODIFY, iteratedirectModifyandendDirectModify대신 실행 단계에서 호출됩니다. 그렇지 않으면, 테이블 수정은 위에서 설명한 테이블 업데이트 함수를 사용하여 실행됩니다.PlanforeignModify.

원격 서버에서 직접 수정을 실행하려면이 기능은 대상 하위 비행기를 A로 다시 작성해야합니다.Foreignscan원격 서버에서 직접 수정을 실행하는 계획 노드. 그만큼작동필드Foreignscancmdtype적절하게 열거; 즉,cmd_updatefor업데이트, CMD_INSERTfor삽입CMD_DELETEfor삭제.

참조PostgreSQL : 문서 : 11 : 57.4. 외국 데이터 포장 쿼리 스포츠 토토 결과추가 정보는

PlandirectModify포인터가 설정되었습니다NULL, 원격 서버에서 직접 수정을 시도하지 않으려고합니다.

무효

원격 서버에서 직접 수정을 실행할 준비. 이것은 집행자 스타트 업 동안 호출됩니다.iteratedirectModify). 그만큼ForeignScanstate노드는 이미 생성되었지만 그FDW_STATE필드는 여전히 널입니다. 수정할 테이블에 대한 정보는를 통해 액세스 할 수 있습니다.ForeignScanstate노드 (특히 기본에서ForeignscanPlan Node.PlandirectModify). eflags이 계획 노드에 대한 집행자의 운영 모드를 설명하는 플래그 비트가 포함되어 있습니다.

(eflags & exec_flag_explain_only)사실,이 함수는 외부로 가시적 인 행동을 수행해서는 안됩니다. 노드 상태를 유효하게하는 데 필요한 최소 값 만설명 디렉토리화andendDirectModify.

BEGINDIRECTMODIFY포인터가 설정되었습니다NULL, 원격 서버에서 직접 수정을 시도하지 않으려고합니다.

TupleTablesLot *

언제삽입, 업데이트또는삭제쿼리가 없습니다반환절은 원격 서버에서 직접 수정 한 후 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는에 대한 행 수를 증가시켜야합니다.ForeignScanstate노드의분석CASE.

iteratedirectModify포인터가 설정되었습니다NULL, 원격 서버에서 직접 수정을 시도하지 않으려고합니다.

무효

원격 서버에서 직접 수정 한 후 정리하십시오. 일반적으로 Palloc'd 메모리를 해제하는 것은 중요하지 않지만 예를 들어 원격 서버에 대한 열린 파일 및 연결을 정리해야합니다.

endDirectModify포인터가 설정되었습니다NULL, 원격 서버에서 직접 수정을 시도하지 않으려고합니다.

57.2.5. 행 잠금을위한 FDW 루틴

FDW가 지원하기를 원한다면늦은 행 잠금(에 설명 된대로PostgreSQL : 문서 : 11 : 57.5. 외국 데이터 포장지에서의 행 토토 결과), 다음 콜백 함수를 제공해야합니다.

RowmarkType

스포츠 토토 베트맨 테이블에 사용할로드 마킹 옵션을보고합니다.RTErangetblentry테이블의 노드 및강도관련성이 요청한 잠금 강도를 설명업데이트/공유조항이있는 경우. 결과는의 회원이어야합니다.RowmarkTypeEnum Type.

이 함수는 AN에 나타나는 각 외국 테이블에 대한 쿼리 계획 중에 호출됩니다.업데이트, 삭제또는업데이트/공유 선택쿼리이며의 대상이 아닙니다업데이트또는삭제.

getforeignrowmarktype포인터가 설정되었습니다NULL,row_mark_copy옵션은 항상 사용됩니다. (이것은Refetchforeignrow절대 호출되지 않으므로 제공 될 필요는 없습니다.)

참조PostgreSQL : 문서 : 11 : 57.5. 외국 데이터 포장지에서의 행 토토 결과자세한 내용은


    

필요한 경우 고정 후 스포츠 토토 베트맨 테이블에서 하나의 튜플을 다시 가져옵니다.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 : 문서 : 11 : 57.5. 외국 데이터 포장지에서의 행 토토 결과자세한 내용은

bool

이전에 회복 된 튜플이 여전히 관련 스캔과 일치하고 예선에 가입하고 튜플의 수정 된 버전을 제공 할 수 있음을 다시 확인하십시오. Join Pushdown을 수행하지 않는 외국 데이터 포장지의 경우 일반적으로이를 설정하는 것이 더 편리합니다.NULL대신FDW_RECHECK_QUALS적절하게. 그러나 외부 결합이 밀려 나면 필요한 모든 속성이 존재하더라도 모든 기본 테이블과 관련된 검사를 결과 튜플에 다시 적용하는 것만으로는 충분하지 않습니다. 일부 예선과 일치하지 않더라도 일부 속성이 반환되지 않고 일부 속성이 널로 이동할 수 있기 때문입니다..Recheckforeignscan예선을 다시 확인하고 여전히 만족스럽고 거짓이라면 True를 반환 할 수 있지만 교체 튜플을 제공된 슬롯에 저장할 수도 있습니다..

Join Pushdown을 구현하기 위해 외국 데이터 래퍼는 일반적으로 재확인에만 사용되는 대체 로컬 조인 계획을 구성합니다. 이것은의 외부 하위 플랜이 될 것입니다.Foreignscan. 재확인이 필요한 경우,이 하위 플랜을 실행할 수 있고 결과 튜플은 슬롯에 저장 될 수 있습니다.getExistingLocalJoinPath대체 로컬 조인 계획으로 사용될 수있는 기존 경로를 검색하는 데 사용될 수 있습니다..getExistingLocalJoinPath지정된 결합 관계의 경로 목록에서 모색되지 않은 경로를 검색합니다. (이러한 경로를 찾지 못하면 NULL을 반환합니다.이 경우 외국 데이터 래퍼가 로컬 경로를 자체적으로 구축하거나 해당 조인에 대한 액세스 경로를 만들지 않도록 선택할 수 있습니다.).

57.2.6. fdw 루틴을위한설명

무효

추가 인쇄설명스포츠 토토 베트맨 테이블 스캔의 출력. 이 기능은 호출 할 수 있습니다설명 프 로퍼 타입 텍스트및 필드를 추가하는 관련 기능설명출력. 깃발 필드es인쇄 할 내용과 상태를 결정하는 데 사용될 수 있으며ForeignScanstate노드를 검사하여 런타임 통계를 제공 할 수 있습니다분석CASE.

설명 foreignscan포인터가 설정되었습니다NULL, 추가 정보가 인쇄되지 않습니다설명.

무효

추가 인쇄설명외국 테이블 업데이트의 출력. 이 기능은 호출 할 수 있습니다설명 프 로퍼 타입 텍스트및 필드를 추가하는 관련 기능설명출력. 깃발 필드es인쇄 할 내용과 상태를 결정하는 데 사용될 수 있으며ModifyTableState노드를 검사하여 런타임 통계를 제공 할 수 있습니다분석케이스. 처음 네 가지 인수는와 동일합니다.earchneforeignModify.

설명 foreignModify포인터가 설정되었습니다NULL, 추가 정보가 인쇄되지 않습니다설명.

무효

추가 인쇄설명원격 서버에서 직접 수정하려는 출력. 이 기능은 호출 할 수 있습니다설명 프 로퍼 타입 텍스트및 필드를 추가하는 관련 기능설명출력. 깃발 필드es인쇄 할 내용과 상태를 결정하는 데 사용될 수 있으며ForeignScanstate노드를 검사하여 런타임 통계를 제공 할 수 있습니다분석CASE.

설명 디렉토리화포인터가 설정되었습니다NULL, 추가 정보가 인쇄되지 않습니다설명.

57.2.7. fdw 루틴을위한분석

bool

이 함수는 다음에 호출됩니다분석는 외국 테이블에서 실행됩니다. FDW 가이 외국 테이블에 대한 통계를 수집 할 수 있다면 반환해야합니다True, 그리고 테이블에서 샘플 행을 수집 할 함수에 대한 포인터를 제공합니다func, 그리고 페이지에서 테이블의 예상 크기와TotalPages. 그렇지 않으면 returnfalse.

FDW가 테이블에 대한 통계 수집을 지원하지 않으면Analyzeforeigntable포인터를 설정할 수 있습니다NULL.

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

int

최대의 무작위 샘플Targrows행을 테이블에서 수집하고 발신자 제공에 저장해야합니다배열. 수집 된 실제 행 수를 반환해야합니다.TotalrowsandTotalDeadrows. (세트TotalDeadrowsFDW에 죽은 줄의 개념이없는 경우 0까지.)

57.2.8. fdw 루틴을위한스포츠 토토 베트맨 스키마 가져 오기

목록 *

외국 테이블 생성 명령 목록을 얻습니다. 이 기능은 실행할 때 호출됩니다스포츠 토토 베트맨 스키마 가져 오기, 그리고 해당 진술의 구문 분석 트리와 사용할 외국 서버의 OID가 전달됩니다. 그것은 c 문자열 목록을 반환해야하며, 각각은 A를 포함해야합니다.스포츠 토토 베트맨 테이블 만들기명령. 이 문자열은 핵심 서버에서 구문 분석하고 실행됩니다.

내에서importforeignschemastmtstruct,Remote_schema테이블을 가져올 원격 스키마의 이름입니다.list_type테이블 이름을 필터링하는 방법을 식별합니다 :fdw_import_schema_all원격 스키마의 모든 테이블을 가져와야 함을 의미합니다 (이 경우table_listis 비어 있음),fdw_import_schema_limit_to에 나열된 테이블 만 포함한다는 의미table_listFDW_IMPORT_SCHEMA_EXCEPT에 나열된 테이블을 제외한다는 의미table_list. 옵션가져 오기 프로세스에 사용되는 옵션 목록입니다. 옵션의 의미는 FDW에 달려 있습니다.NOT NULL열의 속성을 가져와야합니다. 이러한 옵션은 FDW에서 데이터베이스 개체 옵션으로 지원하는 것과 관련이 없습니다.

FDW는 무시할 수 있습니다local_schema필드importforeignschemastmt, 핵심 서버가 해당 이름을 구문 분석에 자동으로 삽입하므로스포츠 토토 베트맨 테이블 만들기명령.

FDW는 |list_typeandtable_list, Core Server가 해당 옵션에 따라 제외 된 테이블에 대한 반환 된 명령을 자동으로 건너 뜁니다. 그러나 처음에는 제외 된 테이블에 대한 명령을 만드는 작업을 피하는 것이 종종 유용합니다.isimportable foreigntable ()주어진 이물질 이름이 필터를 전달하는지 여부를 테스트하는 데 유용 할 수 있습니다.

FDW가 테이블 정의 가져 오기를 지원하지 않으면importforeignschema포인터를 설정할 수 있습니다NULL.

57.2.9. 병렬 실행을위한 FDW 루틴

A Foreignscan노드는 선택적으로 병렬 실행을 지원할 수 있습니다. 평행Foreignscan여러 프로세스에서 실행되며 모든 협력 프로세스에서 각 행을 정확하게 한 번 반환해야합니다. 이를 위해 프로세스는 동적 공유 메모리의 고정 크기 덩어리를 통해 조정할 수 있습니다.

bool

병렬 작업자 내에서 스캔을 수행 할 수 있는지 테스트합니다. 이 기능은 플래너가 병렬 계획이 가능할 수 있다고 생각할 때만 호출되며 해당 스캔이 병렬 작업자 내에서 실행되기에 안전한 경우 TRUE를 반환해야합니다.

이 함수가 정의되지 않은 경우 스캔은 병렬 리더 내에서 수행해야한다고 가정합니다. True를 반환한다고해서 스캔 자체가 병렬로 수행 할 수 있음을 의미하지는 않습니다. 스캔은 병렬 작업자 내에서만 수행 될 수 있습니다.

크기

병렬 작업에 필요한 동적 공유 메모리의 양을 추정하십시오. 이것은 실제로 사용될 금액보다 높을 수 있지만 더 낮아서는 안됩니다.

무효

병렬 작업에 필요한 동적 공유 메모리 초기화.좌표반환 값과 동일한 크기의 공유 메모리 영역을 가리 킵니다.추정 MFOREIGSSCAN. 이 기능은 선택 사항이며 필요하지 않은 경우 생략 할 수 있습니다.

무효

외국 스캔 계획 노드를 재조정 할 때 병렬 작업에 필요한 동적 공유 메모리를 다시 시작하십시오. 이 기능은 선택 사항이며 필요하지 않은 경우 생략 할 수 있습니다.rescanforeignscan함수는 로컬 상태 만 재설정합니다. 현재이 기능은 이전에 호출됩니다rescanforeignscan, 그러나 해당 주문에 의존하지 않는 것이 가장 좋습니다.

무효

|초기화 MFEOREIGSCAN. 이 기능은 선택 사항이며 필요하지 않은 경우 생략 할 수 있습니다.

무효

릴리스 리소스가 예상되면 노드가 완료되지 않을 것으로 예상됩니다. 이것은 모든 경우에 호출되는 것은 아닙니다.endforeignscan이 기능이 먼저 호출되지 않으면 호출 될 수 있습니다. 이 콜백이 호출 된 직후 병렬 쿼리에서 사용되는 DSM 세그먼트가 파괴되기 때문에 DSM 세그먼트가 사라지기 전에 약간의 조치를 취하려는 스포츠 토토 베트맨 데이터 포장지는이 방법을 구현해야합니다..

57.2.10. 경로의 재구성을위한 FDW 루틴

목록 *

이 함수는 주어진 아동 관계의 상위 가장 큰 부모에 의해 매개 변수를 변환하는 동안 호출됩니다child_rel아동 관계에 의해 매개 변수화됩니다. 이 함수는 경로를 다시 말하거나 주어진 곳에 저장된 표현식 노드를 번역하는 데 사용됩니다.fdw_privateA 회원스포츠 토토 베트맨 경로. 콜백이 사용할 수 있습니다Reparameterize_path_by_child, 조정_appendrel_attrs또는조정_appendrel_attrs_multilevel필요에 따라.