이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 59.1. 토토 정의 스캔 경로 생성버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

58.1. 사용자 정의 스캔 토토 캔 생성

사용자 정의 스캔 제공자는 일반적으로 다음 후크를 설정하여 기본 관계에 대한 경로를 추가합니다. 핵심 코드가 관계에 대해 가능한 모든 액세스 경로를 생성 한 후 호출 된 후 (후크가 추가 한 부분 경로를 사용할 수 있도록이 통로 후에 이루어지는 모든 접근 경로를 제외하고) :.

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

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

typedef struct custompath

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

Path이 토토 캔에서 제공 한로드 카운트 견적, 시작 및 총 비용 및 정렬 순서를 포함한 다른 토토 캔와 같이 초기화되어야합니다.플래그비트 마스크입니다.custompath_support_backward_scan사용자 정의 경로가 후진 스캔을 지원할 수있는 경우custompath_support_mark_restore마크 및 복원을 지원할 수있는 경우. 두 기능 모두 선택 사항입니다. 선택 사항custom_paths입니다Path이 사용자 지정 경로 노드에서 사용하는 노드; 이것들은로 변형 될 것입니다.plan플래너의 노드.custom_private사용자 정의 경로의 개인 데이터를 저장하는 데 사용할 수 있습니다. 개인 데이터는에 의해 처리 할 수있는 양식으로 저장해야합니다.Nodetostring, 사용자 정의 경로를 인쇄하려는 디버깅 루틴이 설계된대로 작동합니다.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;

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

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

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

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