59.1. 사용자 정의 스캔 젠 토토 생성#

사용자 정의 스캔 제공자는 일반적으로 다음 후크를 설정하여 기본 관계에 대한 젠 토토를 추가합니다. 핵심 코드가 관계를 위해 가능한 모든 액세스 젠 토토를 생성 한 후 호출 된 후 호출 된 후에 호출 된 병합 젠 토토를 제외 하고이 호출 후에 이루어진 부분 젠 토토를 사용하여 후크가 추가 된 부분 젠 토토를 사용할 수 있습니다.

typedef void ( *set_rel_pathlist_hook_type) (plannerInfo *root,
                                            reploptinfo *rel,
                                            인덱스 RTI,
                                            ra젠 토토etblentry *rte);
extern pgdllimport set_rel_pathlist_hook_type set_rel_pathlist_hook;

이 후크 함수는 코어 시스템에서 생성 된 젠 토토를 검사, 수정 또는 제거하는 데 사용될 수 있지만 사용자 정의 스캔 제공자는 일반적으로 생성에 제한됩니다CustomPath개체 및 추가Rel사용add_path또는add_partial_path부분 경로 인 경우. 사용자 정의 스캔 제공자는 초기화를 담당합니다.CustomPath객체는 다음과 같이 선언됩니다.

typedef struct custompath

    경로 경로;
    UINT32 플래그;
    List *Custom_Paths;
    list *custom_restrictinfo;
    list *custom_private;
    Const CustomPathMethods *메소드;
 custompath;

PATH이 젠 토토에서 제공 한로드 카운트 견적, 시작 및 총 비용 및 정렬 주문을 포함한 다른 젠 토토와 같이 초기화되어야합니다.플래그스캔 제공자가 특정 선택적 기능을 지원할 수 있는지 여부를 지정하는 비트 마스크입니다.플래그포함해야custompath_support_backward_scan사용자 정의 경로가 뒤로 스캔을 지원할 수있는 경우custompath_support_mark_restore마크 및 복원을 지원할 수 있다면custompath_support_projection투영을 수행 할 수있는 경우. (만약에custompath_support_projection가 설정되지 않으면 스캔 노드는 스캔 된 관계의 VAR 만 생성하도록 요청됩니다. 해당 플래그가 설정되면 스캔 노드는 이러한 VARS를 통해 스칼라 표현식을 평가할 수 있어야합니다.) 선택 사항custom_paths입니다.Path이 사용자 정의 노드에서 사용하는 노드; 이것들은로 변형 될 것입니다.plan플래너에 의한 노드. 아래에 설명 된 바와 같이, 조인 관계를 위해 사용자 정의 경로를 만들 수도 있습니다. 그러한 경우custom_restrictinfo가입 조항 세트를 저장하여 교체 교체 조치에 적용해야합니다. 그렇지 않으면 그것은 nil이어야합니다.custom_private사용자 정의 경로의 개인 데이터를 저장하는 데 사용할 수 있습니다. 개인 데이터는에 의해 처리 할 수있는 양식으로 저장해야합니다.Nodetostri젠 토토, 사용자 정의 경로를 인쇄하려는 디버깅 루틴이 설계된대로 작동합니다.Methods필요한 사용자 정의 경로 메소드를 구현하는 (일반적으로 정적으로 할당 된) 객체를 가리려면 아래에 자세히 설명되어 있어야합니다.

사용자 정의 스캔 제공자는 조인 경로를 제공 할 수도 있습니다. 기본 관계의 경우, 그러한 경로는 일반적으로 교체하는 조인에 의해 생성되는 것과 동일한 출력을 생성해야합니다. 이렇게하려면 Join Provider는 다음 후크를 설정 한 다음 후크 함수 내에서 Create를 설정해야합니다.CustomPath조인 관계의 젠 토토.

typedef void ( *set_join_pathlist_hook_type) (plannerInfo *root,
                                             reploptinfo *joinrel,
                                             reploptinfo *outerrel,
                                             reploptinfo *내부 렐,
                                             공동 타입 공동 유형,
                                             joinpathextradata *extra);
extern pgdllimport set_join_pathlist_hook_type set_join_pathlist_hook;

이 후크는 내부 및 외부 관계의 다른 조합으로 동일한 결합 관계에 대해 반복적으로 호출됩니다. 복제 된 작업을 최소화하는 것은 후크의 책임입니다.

조인에 적용 할 조인 조항 세트는extra- thegrictlist는 내부와 외부 관계의 조합에 따라 다릅니다. 에이CustomPathjoinrel사용하는 조인 조항 세트를 포함해야하며, 플래너가 사용하여CustomPath계획으로의 젠 토토, 플래너에 의해 선정 된 경우joinrel.

59.1.1. 사용자 정의 스캔 경로 콜백#

plan *( *plancustompath) (plannerinfo *root,
                         reploptinfo *rel,
                         custompath *best_path,
                         목록 *tlist,
                         목록 *조항,
                         list *custom_plans);

사용자 정의 경로를 완성 된 계획으로 변환합니다. 반환 값은 일반적으로입니다.CustomScan콜백이 할당하고 초기화 해야하는 객체. 보다PostgreSQL : 문서 : 17 : 59.2. 맞춤형 배트맨 토토 계획 만들기자세한 내용은

List *( *ReparameterizeCustOmpathByld) (PlannerInfo *root,
                                          목록 *custom_private,
                                          reploptinfo *child_rel);

이 콜백은 주어진 아동 관계의 상위 상위 부모가 매개 변수를 변환하는 동안 호출됩니다child_rel아동 관계에 의해 매개 변수화됩니다. 콜백은 경로를 다시 보라 계수하거나 주어진에 저장된 표현식 노드를 번역하는 데 사용됩니다.custom_privateA 회원CustomPath. 콜백이 사용할 수 있습니다Reparameterize_path_by_child, 조정_appendrel_attrs또는조정_appendrel_attrs_multilevel필요에 따라.

정정 제출

문서에 올바른 것이 없다면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면