이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 57.2. 와이즈 토토 데이터 래퍼 콜백 루틴버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

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

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

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

53.2.1. 롤 토토 테이블 스캔을위한 FDW 루틴

무효

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

이 기능이 업데이트되어야합니다Baserel- 행제한 Quals에 의해 수행 된 필터링을 설명 한 후 테이블 스캔에 의해 반환 된 행의 예상 행 수입니다. 의 초기 값Baserel- 행는 일정한 기본 추정치 일 뿐이며 가능한 경우 교체해야합니다. 함수는 또한 업데이트를 선택할 수 있습니다Baserel- 너비평균 결과 행 너비의 더 나은 추정치를 계산할 수있는 경우

참조PostgreSQL : 문서 : 9.4 : 외국 데이터 래퍼 쿼리 와이즈 토토추가 정보는

무효

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

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

참조PostgreSQL : 문서 : 9.4 : 외국 데이터 래퍼 쿼리 와이즈 토토추가 정보는

Foreignscan *

생성Outissscan선택한 외래 액세스 경로에서 노드를 계획하십시오. 쿼리 계획이 끝날 때 호출됩니다.getforeignRelsize, 선택된롤 토토 경로(이전에 생산GetforeignPaths), 계획 노드에 의해 방출되는 대상 목록과 계획 노드에 의해 시행 될 제한 조항..

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

참조PostgreSQL : 문서 : 9.4 : 외국 데이터 래퍼 쿼리 와이즈 토토추가 정보는

무효

롤 토토 스캔 실행을 시작하십시오. 이것은 집행자 스타트 업 동안 호출됩니다.반복적 인 ForeignScan). 그만큼Foreignscanstate노드가 이미 생성되었지만 그FDW_STATE필드는 여전히 널입니다. 스캔 할 테이블에 대한 정보는를 통해 액세스 할 수 있습니다.Outissscanstate노드 (특히 기본에서OutiseScanPlan Node.getforeignplan).eflags이 계획 노드에 대한 집행자의 작동 모드를 설명하는 플래그 비트가 포함되어 있습니다.

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

tupletableslot *

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

반환 된 행은 스캔되는 외래 테이블의 열 서명과 일치해야합니다. 필요하지 않은 페치 열을 최적화하기로 선택한 경우 해당 열 위치에 널을 삽입해야합니다.

참고PostgreSQL의 집행자는 행이 반환 된 행이 어떤 것을 위반하는지 걱정하지 않습니다NOT NULL롤 토토 테이블 열에 정의 된 제약 조건 - 그러나 플래너가 관리하고 쿼리를 잘못 최적화 할 수 있습니다.null값은 포함하지 말라고 선언 한 열에 있습니다. aNULL값은 사용자가 존재하지 않아야한다고 선언했을 때 값이 발생합니다. 오류를 제기하는 것이 적절할 수 있습니다 (데이터 유형 불일치의 경우 필요한대로)..

무효

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

무효

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

53.2.2. 롤 토토 테이블 업데이트를위한 FDW 루틴

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

무효

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

그렇게하려면 추가TargetEntry항목 toParsetree- TargetList, 추가 값을 가져 오는 표현식을 포함합니다. 그러한 각 항목은 표시되어야합니다Resjunk=trueResname실행 시간에이를 식별합니다. 일치하는 이름 사용을 피하십시오CTIDn,Wholerow또는Wholerown, 핵심 시스템 이이 이름의 정크 열을 생성 할 수 있습니다.

이 기능은 플래너가 아닌 다시 작성자에서 호출되므로 사용 가능한 정보는 계획 루틴에서 사용할 수있는 정보와 약간 다릅니다.Parsetree업데이트또는삭제명령, whiletarget_rteandtarget_relation대상 롤 토토 표를 설명합니다.

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

목록 *

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

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

참조PostgreSQL : 문서 : 9.4 : 외국 데이터 래퍼 쿼리 와이즈 토토추가 정보는

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

무효

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

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

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

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

tupletableslot *

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

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

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

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

tupletableslot *

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

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

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

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

tupletableslot *

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

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

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

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

무효

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

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

int

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

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

53.2.3. fdw 루틴을위한설명

무효

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

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

무효

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

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

53.2.4. fdw 루틴을위한분석

bool

이 기능은 호출됩니다.스포츠 토토 사이트 PostgreSQL : 문서 : 9.4 : Analyze외국 테이블에서 실행됩니다. FDW 가이 외국 테이블에 대한 통계를 수집 할 수 있다면 반환해야합니다true, 그리고 테이블에서 샘플 행을 수집 할 함수에 대한 포인터를 제공합니다func, 그리고 페이지에서 테이블의 예상 크기를TotalPages. 그렇지 않으면 return거짓.

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

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

int

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