이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 57.4. 외국 데이터 포장 쿼리 토토 꽁 머니 사이트버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

54.4. 외국 데이터 포장 쿼리 토토 꽁 머니

FDW 콜백 함수getforeignRelsize, getforeignpaths, getforeignplan, planforeignModifygetforeignjoinpaths의 작업에 맞아야합니다postgresql플래너. 다음은해야 할 일에 대한 몇 가지 메모입니다.

정보루트andBaserel외국 표에서 가져와야하는 정보의 양을 줄이고 비용을 줄이는 데 사용될 수 있습니다..Baserel- BaserestrictInfo제한이 포함되어 있기 때문에 특히 흥미 롭습니다 (여기서Clauses)를 가져올 행을 필터링하는 데 사용해야합니다. (핵심 집행자가 대신 확인할 수 있으므로 FDW 자체는 이러한 quals를 시행 할 필요가 없습니다.)Baserel- reltargetList어떤 열을 가져와야하는지를 결정하는 데 사용될 수 있습니다. 그러나 그것은에 의해 방출 해야하는 열만 나열합니다.OutiseScanQual Evaluation에서 사용되지만 쿼리에서 출력하지 않은 열이 아닌 토토 꽁 머니 노드.

정보를 유지하기 위해 FDW 계획 기능에 다양한 개인 필드를 사용할 수 있습니다. 일반적으로 FDW 개인 필드에 저장하는 것은 Palloc'd이어야하므로 계획이 끝날 때 되돌릴 것입니다..

Baserel- fdw_privateisvoidFDW 계획 기능이 특정 외국 테이블과 관련된 정보를 저장할 수있는 포인터. 핵심 플래너는을 초기화하는 것을 제외하고는 그것을 만지지 않습니다.repiptinfo노드가 생성되었습니다. 정보를 전달하는 데 유용합니다getforeignRelsizetogetforeignpaths및/또는getforeignpathstogetforeignplan, 따라서 재 계산을 피하십시오.

getforeignpaths개인 정보를 저장하여 다른 액세스 경로의 의미를 식별 할 수 있습니다fdw_private필드외국 경로노드.fdw_private|목록포인터이지만 핵심 플래너가 터치하지 않기 때문에 실제로 아무것도 포함 할 수 있습니다. 그러나 모범 사례는 |Nodetostring, 백엔드에서 사용할 수있는 디버깅 지원과 함께 사용하려면

getforeignplan검사 할 수 있습니다fdw_private선택한 필드외국 경로노드 및 생성fdw_exprsandfdw_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_expressiontofdw_exprs그것이 실행 가능한 형태로 마사지되도록합니다. 아마도 계획 노드에 제어 정보를 넣을 것입니다FDW_PRIVATE실행 기능에 실행 시간에해야 할 일을 알리는 필드. 원격 서버로 전송 된 쿼리에는와 같은 것이 포함됩니다.여기서외국_variable= $ 1FDW_EXPRS발현 트리.

플랜 노드의 Qual List에서 제거 된 조항은 대신 추가되어야합니다fdw_recheck_quals또는 재확인Recheckforeignscan저지른 읽기분리 레벨. 쿼리와 관련된 일부 다른 테이블에 대해 동시 업데이트가 발생하면, 집행자는 모든 원래의 쿼트가 여전히 다른 매개 변수 값 세트에 대해 튜플에 대해 여전히 만족하는지 확인해야 할 수도 있습니다. 사용FDW_RECHECK_QUALS내부에서 점검을 구현하는 것보다 일반적으로 더 쉽습니다Recheckforeignscan, 그러나이 방법은 외부 결합이 밀려 났을 때 불충분 할 것입니다.이 경우 조인 튜플이 튜플을 완전히 거부하지 않고 일부 필드가 널로 이동할 수 있기 때문에..

다른ForeignscanFDWS로 채울 수있는 필드FDW_SCAN_TLIST,이 계획 노드에 대해 FDW가 반환 한 튜플을 설명합니다. 간단한 외국 테이블 스캔의 경우로 설정할 수 있습니다.nil. 비nil값은 대상 목록이어야합니다 (목록TargetEntrys) 반환 된 열을 나타내는 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).

토토 꽁 머니 할 때업데이트또는삭제, planforeignModifyrepoptinfo외국 테이블의 구조 및 사용Baserel- fdw_private스캔 토토 꽁 머니 기능에 의해 이전에 생성 된 데이터. 그러나에서삽입대상 테이블이 스캔되지 않으므로 아니요repoptinfo그것을 위해. 그만큼List반환planforeignModify와 동일한 제한이 있습니다FDW_PRIVATEA 목록Outissscan계획 노드, 즉 구조 만 포함해야합니다.CopyObject복사 방법을 알고 있습니다.

삽입with충돌절은 원격 테이블의 고유 한 제약 또는 제외 제약 조건이 로컬로 알려지지 않기 때문에 충돌 목표를 지정하는 것을 지원하지 않습니다. 이것은 차례로충돌에 대한 업데이트사양이 필수적이므로 지원되지 않습니다.