| PostgreSQL 9.2.24 문서 | ||||
|---|---|---|---|---|
| 이전 | 위로 | 50장. 외부 데이터 래퍼 작성 | 메이저 토토 사이트 : 문서 : 9.2 : 유전자 쿼리 옵티마이저 | |
FDW 콜백 함수GetForeignRelSize, GetForeignPaths및GetForeignPlan다음 작업에 적합해야 합니다.포스트그레SQL플래너. 여기 있습니다
  해야 할 일에 대한 몇 가지 참고 사항입니다.
정보루트그리고바셀금액을 줄이는 데 사용할 수 있습니다. 외부 테이블에서 가져와야 하는 정보(그리고 따라서 비용이 절감됩니다.)baserel-baserestrictinfo특히 제한 한정어()가 포함되어 있어 흥미롭습니다.어디에서절)을 필터링하는 데 사용해야 합니다. 가져올 행. (FDW 자체는 강제할 필요가 없습니다. 핵심 실행자가 대신 이를 확인할 수 있기 때문에 이러한 특성이 있습니다.)baserel-reltargetlist다음에 사용할 수 있습니다. 어떤 열을 가져와야 하는지 결정합니다. 하지만 그것뿐이라는 점에 유의하세요 에서 내보내야 하는 열을 나열합니다.ForeignScan메이저 토토 사이트 노드, 열이 아님 품질 평가에 사용되지만 쿼리에서는 출력되지 않습니다.
FDW 계획에 다양한 비공개 필드를 사용할 수 있습니다. 정보를 보관하는 기능입니다. 일반적으로 저장하는 모든 것은 FDW 비공개 필드에서는 palloc'되어야 합니다. 계획 종료 시 회수되었습니다.
baserel-fdw_private은무효FDW에 사용 가능한 포인터
  관련된 정보를 저장하는 계획 기능
  특별한 외국 테이블. 코어 플래너는 건드리지 않습니다
  NULL로 초기화하는 것을 제외하고는바셀노드가 생성되었습니다. 합격하는데 유용합니다
  정보는 다음에서 전달됨GetForeignRelSize에GetForeignPaths및/또는GetForeignPaths에GetForeignPlan, 이를 통해 회피
  재계산.
GetForeignPaths식별할 수 있습니다
  개인정보를 저장하여 다양한 접근 경로를 의미
  에서fdw_private필드ForeignPath노드.fdw_private다음으로 선언되었습니다.목록포인터이지만 실제로는 무엇이든 포함할 수 있습니다.
  코어 플래너가 건드리지 않기 때문입니다. 그러나 모범 사례
  덤프 가능한 표현을 사용하는 것입니다.nodeToString, 디버깅 지원에 사용
  백엔드에서 사용할 수 있습니다.
GetForeignPlan검토할 수 있습니다fdw_private선택된 필드ForeignPath노드, 생성 가능fdw_exprs그리고fdw_private에 배치될 목록ForeignScan계획 노드, 여기서
  실행 시 사용할 수 있습니다. 이 두 목록은 모두 다음과 같아야 합니다.
  다음과 같은 형태로 표현됩니다.copyObject복사하는 방법을 알고 있습니다.fdw_private목록에는 다른 제한사항이 없으며
  어떤 방식으로든 코어 백엔드에 의해 해석되지 않습니다.fdw_exprs목록은 NIL이 아닌 경우 다음과 같이 예상됩니다.
  실행 시 실행될 표현식 트리를 포함합니다.
  시간. 이 나무들은 기획자의 후처리를 거쳐
  완전히 실행 가능하게 만드세요.
에GetForeignPlan, 일반적으로
  전달된 대상 목록은 그대로 계획 노드에 복사될 수 있습니다. 는
  전달된 scan_clauses 목록에는 다음과 동일한 절이 포함되어 있습니다.baserel-baserestrictinfo, 하지만 그럴 수도 있습니다.
  더 나은 실행 효율성을 위해 재정렬되었습니다. 간단한 경우에는
  FDW는 그냥 제거할 수 있습니다.RestrictInfo노드
  scan_clauses 목록에서 (사용extract_actual_clauses) 그리고 모든 절을 넣습니다.
  계획 노드의 품질 목록에 포함됩니다. 이는 모든 조항이
  런타임에 실행자가 확인합니다. 더 복잡한 FDW
  내부적으로 일부 조항을 확인할 수 있으며,
  해당 조항을 계획 노드의 자격 목록에서 제거할 수 있는 경우
  집행자가 이를 다시 확인하는 데 시간을 낭비하지 않도록 합니다.
예를 들어, FDW는 일부 제한 조항을 식별할 수 있습니다.
  형식의외국_변수
  = 하위 표현, 이는 다음과 같을 수 있다고 판단합니다.
  로컬에서 평가된 값이 주어지면 원격 서버에서 실행됩니다.
  의하위 표현. 실제
  그러한 조항의 식별은GetForeignPaths, 비용에 영향을 미치므로
  경로에 대한 추정. 경로는fdw_private필드에는 아마도
  식별된 절에 대한 포인터RestrictInfo노드. 그런 다음GetForeignPlan다음에서 해당 조항을 제거하겠습니다.
  scan_clauses, 그러나 다음을 추가하세요.하위 표현에fdw_exprs그것이 마사지되도록 하기 위해
  실행 가능한 형태. 아마도 제어 정보도 넣을 것입니다.
  계획 노드에fdw_private14570_14713어디외국_변수 = $1,
  런타임 시에 평가를 통해 얻은 매개변수 값fdw_exprs표현 트리.
FDW는 항상 의존하는 경로를 하나 이상 구성해야 합니다.
  테이블의 제한 조항에만 해당됩니다. 조인 쿼리에서는
  조인에 의존하는 경로를 구성하도록 선택할 수도 있습니다.
  조항, 예를 들어외국_변수 =
  local_variable. 그러한 조항은
  찾을 수 없음baserel-baserestrictinfo그러나 다음에서 찾아야 합니다.
  관계의 조인 목록. 이러한 절을 사용하는 경로를 a라고 합니다."매개변수화된 경로". 식별해야 합니다.
  선택한 조인 절에 사용된 다른 관계
  적절한 값param_info; 사용get_baserel_parampathinfo에
  그 값을 계산해 보세요. 에서GetForeignPlan, 그local_variable조인 절의 일부
  다음에 추가됩니다.fdw_exprs그리고
  그런 다음 런타임에 케이스는 일반 케이스와 동일하게 작동합니다.
  제한 조항.