| 젠 토토 : 문서 : 9.6 : 젠 토토 | |||
|---|---|---|---|
| PostgreSQL : 문서 : 9.6 : 사용자 정의 토토 캔 제공자 작성 | PostgreSQL : 문서 : 9.6 : 사용자 정의 토토 캔 제공자 작성 | 57장. 사용자 정의 스캔 제공자 작성 | PostgreSQL : 문서 : 9.6 : 사용자 지정 토토 핫 계획 만들기 |
사용자 정의 스캔 제공자는 일반적으로 다음 후크를 설정하여 기본 관계에 대한 롤 토토를 추가합니다. 이 후크는 핵심 코드가 관계에 대해 가능한 모든 액세스 롤 토토를 생성한 후에 호출됩니다(후크에 의해 추가된 부분 롤 토토를 사용할 수 있도록 이 호출 후에 생성되는 수집 롤 토토는 제외):
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사용 중추가_롤 토토. 사용자 정의 스캔 제공자는 초기화를 담당합니다.사용자 정의 롤 토토객체는 다음과 같이 선언됩니다:
typedef 구조체 CustomPath
롤 토토 롤 토토;
uint32 플래그;
*custom_paths를 나열하십시오.
*custom_private 나열;
const CustomPathMethods *메소드;
사용자 정의 롤 토토;
롤 토토행 개수 추정, 시작 및 총 비용, 이 롤 토토에서 제공하는 정렬 순서를 포함하여 다른 롤 토토와 마찬가지로 초기화되어야 합니다.플래그비트 마스크이며 다음을 포함해야 합니다.CUSTOMPATH_SUPPORT_BACKWARD_SCAN사용자 정의 롤 토토가 역방향 스캔을 지원할 수 있는 경우CUSTOMPATH_SUPPORT_MARK_RESTORE표시 및 복원을 지원할 수 있는 경우. 두 기능 모두 선택 사항입니다. 선택 사항custom_paths다음 목록입니다롤 토토이 사용자 정의 롤 토토 노드에서 사용되는 노드; 이것들은 다음과 같이 변환될 것입니다.계획플래너별 노드.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 *root,
RelOptInfo *rel,
사용자 정의 롤 토토 *best_path,
목록 *tlist,
*절 나열,
*custom_plans 나열);
맞춤 롤 토토를 완성된 계획으로 변환합니다. 반환 값은 일반적으로 다음과 같습니다.CustomScan콜백이 할당하고 초기화해야 하는 객체입니다. 참조PostgreSQL : 문서 : 9.6 : 사용자 지정 토토 핫 계획 만들기자세한 내용은.