사용자 정의 스캔 제공자는 일반적으로 다음 후크를 설정하여 기본 관계에 대한 토토를 추가합니다. 이 후크는 핵심 코드가 관계에 대해 가능한 모든 액세스 토토를 생성한 후에 호출됩니다(후크에 의해 추가된 부분 토토를 사용할 수 있도록 이 호출 후에 생성되는 Gather 및 Gather Merge 토토는 제외):
typedef void (*set_rel_pathlist_hook_type) (PlannerInfo *root,
RelOptInfo *rel,
인덱스 rti,
RangeTblEntry *rte);
extern PGDLLIMPORT set_rel_pathlist_hook_type set_rel_pathlist_hook;
이 후크 기능을 사용하여 핵심 시스템에서 생성된 토토를 검사, 수정 또는 제거할 수 있지만 사용자 정의 스캔 공급자는 일반적으로 토토 생성에만 국한됩니다.사용자 정의 토토객체 및 추가rel사용 중추가_토토또는add_partial_path부분 토토인 경우. 사용자 정의 스캔 제공자는 초기화를 담당합니다.사용자 정의 토토객체는 다음과 같이 선언됩니다.
typedef 구조체 CustomPath
토토 토토;
uint32 플래그;
*custom_paths를 나열하십시오.
*custom_restrictinfo 나열;
*custom_private 나열;
const CustomPathMethods *메소드;
사용자 정의 토토;
토토행 개수 추정, 시작 및 총 비용, 이 토토에서 제공하는 정렬 순서를 포함하여 다른 토토와 마찬가지로 초기화되어야 합니다.플래그스캔 공급자가 특정 선택적 기능을 지원할 수 있는지 여부를 지정하는 비트 마스크입니다.플래그포함해야 함CUSTOMPATH_SUPPORT_BACKWARD_SCAN사용자 정의 토토가 역방향 스캔을 지원할 수 있는 경우,CUSTOMPATH_SUPPORT_MARK_RESTORE표시 및 복원을 지원할 수 있는 경우 및CUSTOMPATH_SUPPORT_PROJECTION투영을 수행할 수 있는 경우. (만약CUSTOMPATH_SUPPORT_PROJECTION이 설정되지 않은 경우, 스캔 노드는 스캔된 관계의 Vars를 생성하도록 요청받습니다. 반면 해당 플래그가 설정된 경우 스캔 노드는 이러한 Var에 대해 스칼라 표현식을 평가할 수 있어야 합니다.) 선택 사항custom_paths다음 목록입니다토토이 사용자 정의 토토 노드에서 사용되는 노드; 이것들은 다음과 같이 변환될 것입니다.계획플래너별 노드. 아래에 설명된 대로 조인 관계에 대해서도 사용자 지정 토토를 만들 수 있습니다. 그러한 경우에는,custom_restrictinfo사용자 정의 토토가 대체하는 조인에 적용할 조인 절 세트를 저장하는 데 사용되어야 합니다. 그렇지 않으면 NIL이어야 합니다.custom_private사용자 정의 토토의 개인 데이터를 저장하는 데 사용할 수 있습니다. 개인 데이터는 다음에서 처리할 수 있는 형식으로 저장되어야 합니다.nodeToString, 사용자 정의 토토를 인쇄하려고 시도하는 디버깅 루틴이 설계된 대로 작동하도록 합니다.메서드필요한 사용자 정의 토토 메소드를 구현하는 (일반적으로 정적으로 할당된) 객체를 가리켜야 합니다. 자세한 내용은 아래에 설명되어 있습니다.
사용자 정의 스캔 제공자는 조인 토토도 제공할 수 있습니다. 기본 관계와 마찬가지로 이러한 토토는 대체하는 조인에 의해 일반적으로 생성되는 것과 동일한 출력을 생성해야 합니다. 이렇게 하려면 조인 공급자가 다음 후크를 설정한 다음 후크 함수 내에서 create맞춤 토토조인 관계에 대한 토토.
typedef void (*set_join_pathlist_hook_type) (PlannerInfo *root,
RelOptInfo *joinrel,
RelOptInfo *외부,
RelOptInfo *innerrel,
JoinType 조인 유형,
JoinPathExtraData *추가);
extern PGDLLIMPORT set_join_pathlist_hook_type set_join_pathlist_hook;
이 후크는 내부 및 외부 관계의 다양한 조합으로 동일한 조인 관계에 대해 반복적으로 호출됩니다. 중복된 작업을 최소화하는 것은 후크의 책임입니다.
또한 다음과 같이 전달되는 조인에 적용할 조인 절 세트에 유의하세요.추가-제한 목록, 내부 관계와 외부 관계의 조합에 따라 달라집니다. 갑맞춤 토토다음에 대해 생성된 토토조인렐플래너가 변환하는 데 사용되는 조인 절 세트를 포함해야 합니다.사용자 정의 토토계획자가 해당 토토를 위한 최선의 토토로 선택한 경우 계획에 대한 토토조인렐.
계획 *(*PlanCustomPath) (PlannerInfo *루트,
RelOptInfo *rel,
사용자 정의 토토 *best_path,
목록 *tlist,
*절 나열,
*custom_plans 나열);
맞춤 토토를 완성된 계획으로 변환합니다. 반환 값은 일반적으로 다음과 같습니다.CustomScan콜백이 할당하고 초기화해야 하는 객체입니다. 참조PostgreSQL : 문서 : 17 : 59.2. 맞춤형 토토 사이트 계획 만들기자세한 내용은.
목록 *(*ReparameterizeCustomPathByChild) (PlannerInfo *루트,
*custom_private 목록,
RelOptInfo *child_rel);
이 콜백은 주어진 하위 관계의 최상위 상위에 의해 매개변수화된 토토를 변환하는 동안 호출됩니다.child_rel하위 관계에 의해 매개변수화됩니다. 콜백은 토토를 다시 매개변수화하거나 주어진에 저장된 표현식 노드를 변환하는 데 사용됩니다.custom_privatea의 회원맞춤 토토. 콜백은 다음을 사용할 수 있습니다.reparameterize_path_by_child, adjust_appendrel_attrs또는adjust_appendrel_attrs_multilevel필요에 따라.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.