FDW 콜백 함수getforeignRelsize
, getforeignpaths
, getforeignplan
, planforeignModify
, getforeignjoinpaths
, getforeignupperPaths
및PlandirectModify
의 작업에 맞아야합니다PostgreSQL플래너. 다음은해야 할 일에 대한 몇 가지 메모입니다.
정보루트
andBaserel
외국 표에서 가져와야하는 정보의 양을 줄이고 비용을 줄이는 데 사용될 수 있습니다..Baserel- Baserestrictinfo
제한이 포함되어 있기 때문에 특히 흥미 롭습니다 (여기서
Clauses)를 가져올 행을 필터링하는 데 사용해야합니다. (핵심 집행자가 대신 확인할 수 있으므로 FDW 자체는 이러한 quals를 시행 할 필요가 없습니다.)Baserel- reltarget- exprs
어떤 열을 가져와야하는지 결정하는 데 사용될 수 있습니다. 그러나 그것은에 의해 방출 해야하는 열만 나열합니다.Foreignscan
Qual Evaluation에서 사용되지만 쿼리에서 출력하지 않은 열이 아닌 스포츠 토토 베트맨 노드..
정보를 유지하기 위해 FDW 계획 기능에 다양한 개인 필드를 사용할 수 있습니다. 일반적으로 FDW 개인 필드에 저장하는 것은 Palloc'd이어야하므로 계획이 끝날 때 되 찾을 수 있습니다..
Baserel- fdw_private
isvoid
FDW 계획 기능이 특정 외국 테이블과 관련된 정보를 저장할 수있는 포인터. 핵심 플래너는을 초기화하는 것을 제외하고는 그것을 만지지 않습니다.repiptinfo
노드가 생성되었습니다. 정보를 전달하는 데 유용합니다getforeignRelsize
togetforeignpaths
및/또는getforeignpaths
togetforeignplan
, 따라서 재 계산을 피하십시오.
getforeignpaths
개인 정보를 저장하여 다른 액세스 경로의 의미를 식별 할 수 있습니다fdw_private
필드외국 경로
노드.fdw_private
|List
포인터이지만 핵심 플래너가 터치하지 않기 때문에 실제로 아무것도 포함 할 수 있습니다. 그러나 모범 사례는 |Nodetostring
, 백엔드에서 사용 가능한 디버깅 지원과 함께 사용하려면
getforeignplan
를 검사 할 수 있습니다fdw_private
선택한 필드외국 경로
노드 및 생성fdw_exprs
andfdw_private
에 배치 할 목록Foreignscan
실행 시간에 사용할 수있는 계획 노드. 이 두 목록은 형식으로 표시되어야합니다.CopyObject
복사 방법을 알고 있습니다. 그만큼fdw_private
목록에는 다른 제한이 없으며 핵심 백엔드에 의해 어떤 식 으로든 해석되지 않습니다. 그만큼fdw_exprs
목록에는 런 타임에 실행되도록 의도 된 표현 트리가 포함될 것으로 예상됩니다. 이 나무들은 플래너에 의해 사후 처리를 겪게되어 완전히 실행 가능하게 만들 것입니다.
ingetforeignplan
, 일반적으로 전달 된 대상 목록은 스포츠 토토 베트맨 노드에 복사 할 수 있습니다. 통과Scan_Clauses
목록은와 동일한 조항을 포함합니다Baserel- Baserestrictinfo
이지만 더 나은 실행 효율성을 위해 다시 주문할 수 있습니다. 간단한 경우 FDW가 스트라이프 할 수 있습니다thegrictinfo
노드Scan_Clauses
목록 (사용Extract_Actual_Clauses
) 모든 조항을 플랜 노드의 Qual 목록에 넣습니다. 즉, 모든 조항이 실행 시간에 집행자가 점검하게됩니다. 더 복잡한 FDW는 내부적으로 일부 조항을 확인할 수 있으며,이 경우 해당 조항을 플랜 노드의 Qual List에서 제거하여 집행자가 시간을 다시 확인하는 데 시간을 낭비하지 않도록 할 수 있습니다..
예를 들어, FDW는 양식의 일부 제한 조항을 식별 할 수 있습니다외국_variable
=
sub_expression
, 로컬로 평가 된 값이 주어지면 원격 서버에서 실행될 수 있다고 결정합니다.sub_expression
. 그러한 조항의 실제 식별은 동안 발생해야합니다.GetforeignPaths
, 경로의 비용 추정치에 영향을 미치기 때문입니다. 경로fdw_private
필드는 아마도 식별 된 절에 대한 포인터를 포함 할 것입니다thegrictinfo
노드. 그 다음에getforeignplan
해당 조항을 제거 할 것입니다Scan_Clauses
그러나 추가sub_expression
tofdw_exprs
실행 가능한 양식으로 마사지되도록합니다. 아마도 계획 노드에 제어 정보를 넣을 것입니다FDW_PRIVATE
실행 기능에 실행 시간에해야 할 일을 알리는 필드. 원격 서버로 전송 된 쿼리에는와 같은 것이 포함됩니다.여기서
외국_variable
= $ 1fdw_exprs
발현 트리.
플랜 노드의 Qual List에서 제거 된 모든 조항은 대신 추가되어야합니다fdw_recheck_quals
또는 재확인Recheckforeignscan
Committed
격리 레벨. 쿼리와 관련된 일부 다른 테이블에 대해 동시 업데이트가 발생하면, 집행자는 모든 원래의 쿼트가 여전히 다른 매개 변수 값 세트에 대해 튜플에 대해 여전히 만족하는지 확인해야 할 수도 있습니다. 사용fdw_recheck_quals
내부에서 점검을 구현하는 것보다 일반적으로 쉽습니다Recheckforeignscan
, 그러나이 방법은 외부 결합이 밀려 나면 불충분 할 것입니다.이 경우 조인 튜플이 튜플을 완전히 거부하지 않고 일부 필드가 널로 이동할 수 있기 때문에..
다른Outissscan
FDWS로 채울 수있는 필드FDW_SCAN_TLIST
,이 계획 노드에 대해 FDW가 반환 한 튜플을 설명합니다. 간단한 외국 테이블 스캔의 경우로 설정할 수 있습니다.nil
비nil
값은 대상 목록이어야합니다 (목록TargetEntry
s) 반환 된 열을 나타내는 var 및/또는 표현을 포함합니다. 예를 들어 FDW가 쿼리에 필요한 일부 열을 생략했음을 보여주기 위해 사용될 수 있습니다. 또한 FDW가 로컬에서 수행 할 수있는 것보다 쿼리가 사용하는 표현식을보다 저렴하게 계산할 수 있다면 표현식을 추가 할 수 있습니다.FDW_SCAN_TLIST
. 조인 스포츠 토토 베트맨 (getforeignjoinpaths
) 항상 공급해야합니다FDW_SCAN_TLIST
반환 할 열 세트를 설명하려면
FDW는 항상 테이블의 제한 조항에만 의존하는 경로를 항상 구성해야합니다. 조인 쿼리에서는 조인 조항에 의존하는 경로를 구성하도록 선택할 수도 있습니다.외국_variable
=
local_variable
. 그러한 조항은 찾을 수 없습니다Baserel- Baserestrictinfo
그러나 관계의 조인 목록에서 찾아야합니다. 그러한 조항을 사용하는 경로를 A라고합니다.“매개 변수 경로”. 선택한 조인 절에 사용 된 다른 관계를 적절한 값으로 식별해야합니다.param_info
; 사용get_baserel_parampathinfo
해당 값을 계산합니다. 안에getforeignplan
, Thelocal_variable
조인 절 부분이 추가됩니다FDW_EXPRS
FDW가 원격 조인을 지원하는 경우getforeignjoinpaths
생산해야외국 경로
s와 거의 같은 방식으로 잠재적 인 원격 조인이getforeignpaths
기본 테이블 작업. 의도 한 가입에 대한 정보는 전달 될 수 있습니다.getforeignplan
위에서 설명한 것과 동일한 방식으로. 하지만,BaserestrictInfo
가입 관계와 관련이 없습니다. 대신, 특정 조인에 대한 관련 조인 조항이 전달됩니다.getforeignjoinpaths
별도의 매개 변수로서 (extra- gronglist
).
FDW는 그룹화 또는 집계와 같은 스캔 및 조인 수준보다 높은 일부 계획 작업의 직접 실행을 추가로 지원할 수 있습니다. 이러한 옵션을 제공하려면 FDW는 경로를 생성하고 적절한 상태에 삽입해야합니다상류 관계. 예를 들어, 원격 집계를 나타내는 경로는에 삽입되어야합니다.Upperrel_group_agg
관계, 사용add_path
. 이 경로는 외국 관계에 대한 간단한 스캔 경로를 읽음으로써 로컬 집계와 비용으로 비용을 기준으로 비교됩니다 (그러한 경로도 공급되어야한다는 점에 유의하십시오. 그렇지 않으면 계획 시간에 오류가 발생합니다). 원격 응집 경로가 이기면 일반적으로 이기면 전화를 통해 일반적인 방식으로 계획으로 전환됩니다getforeignplan
. 그러한 경로를 생성하기에 권장되는 장소는에 있습니다.getforeignupperPaths
콜백 함수, 각 상위 관계에 대해 호출되는 콜백 함수 (즉, 각 스캔 후/조인 처리 단계), 쿼리의 모든 기본 관계가 동일한 FDW에서 나온 경우
PlanforeignModify
및 다른 콜백에 설명 된섹션 56.2.4외국 관계가 일반적인 방식으로 스캔되고 개별 행 업데이트는 로컬에 의해 주도된다는 가정을 중심으로 설계되었습니다.modifyTable
계획 노드. 이 접근법은 업데이트가 로컬 테이블과 외국 테이블을 읽어야하는 일반적인 경우에 필요합니다. 그러나 외국 서버에서 작업을 전적으로 실행할 수 있다면 FDW는이를 나타내는 경로를 생성하여에 삽입 할 수 있습니다.Upperrel_Final
상류 관계, 여기서modifyTable
접근. 이 접근법은 원격 구현에도 사용될 수 있습니다업데이트 선택
,에 설명 된 행 잠금 콜백을 사용하지 않고섹션 56.2.5. 에 삽입 된 경로를 명심하십시오.Upperrel_Final
구현을 담당합니다all쿼리 동작.
스포츠 토토 베트맨 할 때업데이트
또는삭제
, PlanforeignModify
andPlandirectModify
repoptinfo
외국 테이블의 구조 및 사용Baserel- fdw_private
스캔 계획 기능에 의해 이전에 생성 된 데이터. 그러나에서삽입
대상 테이블이 스캔되지 않으므로 없음repoptinfo
그것을 위해. 그만큼List
반환PlanforeignModify
fdw_private
A 목록Foreignscan
계획 노드, 즉 구조 만 포함해야합니다.CopyObject
복사 방법을 알고 있습니다.
삽입
with충돌
절은 원격 테이블의 고유 한 제약 또는 제외 제약 조건이 로컬로 알려지지 않았기 때문에 충돌 목표를 지정하는 것을 지원하지 않습니다. 이것은 차례로충돌시 업데이트
사양이 필수적이므로 지원되지 않습니다.
문서에 올바른 것이 없으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면