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

56.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이 사용자 지정 경로 노드에서 사용하는 노드; 이것들은로 변형 될 것입니다.planPlanner의 노드.custom_private는 사용자 정의 경로의 개인 데이터를 저장하는 데 사용할 수 있습니다. 개인 데이터는에 의해 처리 할 수있는 양식으로 저장해야합니다.Nodetostring, 사용자 정의 경로를 인쇄하려는 디버깅 루틴이 설계된대로 작동합니다.방법필요한 사용자 정의 경로 메소드를 구현하는 (일반적으로 정적으로 할당 된) 객체를 가리켜야하며, 그 중 2 개만 있으며 아래에 자세히 설명 된대로

사용자 정의 스캔 제공자는 조인 경로를 제공 할 수도 있습니다. 기본 관계의 경우, 그러한 경로는 일반적으로 교체하는 조인에 의해 생성되는 것과 동일한 출력을 생성해야합니다. 이렇게하려면 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;

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

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

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

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

void (*TeptoutCustompath) (StringInfo str,
                           const custompath *노드);

추가 출력 생성Nodetostring이 사용자 지정 경로에서 호출됩니다. 이 콜백은 선택 사항입니다. 부터Nodetostring를 포함하여 볼 수있는 구조에 모든 필드를 자동으로 덤프합니다.custom_private, 이것은에만 유용합니다CustomPath실제로 추가 필드를 포함하는 더 큰 구조물에 포함되어 있습니다.