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

60.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또는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사용자 정의 경로의 개인 데이터를 저장하는 데 사용할 수 있습니다. 개인 데이터는에 의해 처리 할 수있는 양식으로 저장해야합니다.Nodetostring, 사용자 정의 경로를 인쇄하려는 디버깅 루틴이 설계된대로 작동합니다.방법필요한 사용자 정의 경로 메소드를 구현하는 (일반적으로 정적으로 할당 된) 객체를 가리켜야합니다.

사용자 정의 스캔 제공자는 조인 경로를 제공 할 수도 있습니다. 기본 관계의 경우, 그러한 경로는 일반적으로 교체하는 조인에 의해 생성되는 것과 동일한 출력을 생성해야합니다. 이렇게하려면 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- gronglist는 내부 및 외부 관계의 조합에 따라 다릅니다. 에이CustomPathjoinrel사용하는 조인 조항 세트가 포함되어야하며, 이는 플래너가 사용하여CustomPath계획으로의 스포츠 토토 베트맨, 플래너에 의해 선정 된 경우joinrel.

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

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

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

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

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