이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.현재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

54.2. 확장성

인터페이스에는 높은 수준의 추상화, 액세스 방법 필요 구현자는 데이터 유형의 의미를 구현하기만 합니다. 액세스되고 있습니다.층 자체적으로 동시성을 처리하고 트리를 로깅하고 검색합니다. 구조.

을 얻기 위해 필요한 모든 것액세스 방법 작동은 4개(또는 5개)의 사용자 정의를 구현하는 것입니다. 트리의 키 동작을 정의하는 메서드와 키, 인덱싱된 항목 및 인덱싱 가능한 배트맨 토토 간의 관계. 한마디로,결합 일반성, 코드 재사용 및 깔끔한 확장성을 갖춘 인터페이스.

연산자 클래스가 수행하는 네 가지 메소드다음을 제공해야 합니다:

int 비교(데이텀 a, 데이텀 비)

두 개의 키(색인된 항목 아님!)를 비교하고 0보다 작은 정수, 0 또는 0보다 큰 정수, 첫 번째 키가 다음보다 작거나 같은지 여부를 나타냅니다. 두 번째보다 큽니다. Null 키는 절대 전달되지 않습니다. 기능.

데이텀 *extractValue(데이텀 itemValue, int32 *nkeys, bool **nullFlags)

항목이 주어진 palloc'd 키 배열을 반환합니다. 색인이 생성되었습니다. 반환된 키의 수는 다음 위치에 저장되어야 합니다.*nkeys. 키 중 하나라도 가능하다면 null, 또한 배열의 palloc도 있습니다.*nkeys103PostgreSQL: 문서: 9.1: 확장성85*nullFlags, 이를 null로 설정합니다. 필요에 따라 플래그를 지정합니다.*nullFlags될 수 있습니다 모든 키가 null이 아닌 경우 NULL(초기값)을 남깁니다. 는 항목에 키가 없으면 반환 값은 NULL이 될 수 있습니다.

데이텀 *extractQuery(데이텀 쿼리, int32 *nkeys, StrategyNumber n, bool **pmatch, 포인터 **extra_data, bool **nullFlags, int32 *검색모드)

다음과 같은 값이 주어지면 palloc'd 키 배열을 반환합니다. 질문; 즉,질의이것은 인덱싱 가능한 연산자의 오른쪽에 있는 값 왼쪽은 색인이 생성된 열입니다.n은 운영자의 전략 번호입니다. 연산자 클래스 내에서(참조섹션 35.14.2). 종종,추출배트맨 토토필요할 것입니다 상담하다n데이터를 결정하기 위해 유형질의그리고 그 방법 키 값을 추출하는 데 사용해야 합니다. 반환된 수 키는 다음에 저장되어야 합니다.*nkeys. 키 중 하나라도 null이 될 수 있으면 다음 배열도 palloc에 추가합니다.*nkeys부울, 주소 저장 에서*nullFlags, 이를 null로 설정합니다. 필요에 따라 플래그를 지정합니다.*nullFlags될 수 있습니다 모든 키가 null이 아닌 경우 NULL(초기값)을 남깁니다. 는 다음과 같은 경우 반환 값은 NULL일 수 있습니다.질의키가 포함되어 있지 않습니다.

검색모드출력입니다 허용하는 인수추출배트맨 토토방법에 대한 세부정보를 지정합니다. 검색이 완료됩니다. 만약에*검색모드다음으로 설정됨GIN_SEARCH_MODE_DEFAULT(이 값은 호출 전으로 초기화됩니다), 일치하는 항목만 반환된 키 중 적어도 하나는 후보로 간주됩니다. 일치합니다. 만일*검색모드다음으로 설정됨GIN_SEARCH_MODE_INCLUDE_EMPTY, 그런 다음 일치하는 항목이 하나 이상 포함된 항목 외에도 키, 키가 전혀 포함되지 않은 항목이 고려됩니다. 후보 경기. (이 모드는 구현에 유용합니다. 예를 들어 is-subset-of 연산자입니다.) If*검색모드다음으로 설정됨GIN_SEARCH_MODE_ALL, null이 아닌 모든 항목 인덱스에서는 후보 일치로 간주됩니다. 반환된 키 중 하나와 일치하는지 여부. (이 모드는 필요하기 때문에 다른 두 가지 선택보다 느립니다. 본질적으로 전체 인덱스를 스캔하지만 코너 케이스를 올바르게 구현하는 데 필요합니다. 운영자 대부분의 경우 이 모드가 필요한 것은 아마도 좋지 않을 것입니다. GIN 연산자 클래스의 후보입니다.) 사용할 기호 이 모드 설정은 다음에 정의되어 있습니다.액세스/gin.h.

pmatch은 출력 인수입니다. 부분 일치가 지원되는 경우에 사용됩니다. 그것을 사용하려면,추출배트맨 토토할당해야 함 배열*nkeys부울 및 저장 주소는*pmatch. 각각 배열의 요소는 다음과 같은 경우 TRUE로 설정되어야 합니다. 해당 키에는 부분 일치가 필요하며, 그렇지 않으면 FALSE입니다. 만일*pmatchNULL로 설정되고 GIN으로 설정됩니다. 부분 일치가 필요하지 않다고 가정합니다. 변수는 호출 전에 NULL로 초기화되므로 이 인수는 지원하지 않는 연산자 클래스에서는 단순히 무시됩니다. 부분적으로 일치합니다.

extra_data출력입니다 허용하는 인수추출배트맨 토토추가 데이터를 전달하기 위해일관됨그리고비교부분메소드. 받는 사람 사용하세요,추출배트맨 토토반드시 배열을 할당합니다.*nkeys포인터를 사용하고 주소를 다음 위치에 저장합니다.*extra_data, 그런 다음 원하는 것을 저장하세요. 개별 포인터에. 변수가 초기화되었습니다. 호출 전에 NULL로 변환하므로 이 인수는 간단히 무시할 수 있습니다. 추가 데이터가 필요하지 않은 연산자 클래스에 의해. 만일*extra_data설정되었습니다. 전체 배열이에 전달됩니다.일관됨방법 및 적절한 요소를비교부분방법.

부울 일관성(부울 검사[], StrategyNumber n, 데이텀 쿼리, int32 nkeys, 포인터 extra_data[], bool *recheck, 데이텀 queryKeys[], bool nullFlags[])

색인된 항목이 배트맨 토토를 만족하면 TRUE를 반환합니다. 전략 번호가 있는 연산자n(또는 재확인 표시가 반환됨). 이 기능은 다음 항목에 직접 액세스할 수 없습니다. 인덱싱된 항목의 값, 이후항목을 명시적으로 저장하지 않습니다. 오히려 이용 가능한 것은 어떤 키에 대한 지식입니다. 배트맨 토토에서 추출된 값은 지정된 인덱스에 나타납니다. 아이템.확인배열에 길이가 있음n키과 동일합니다. 이전에 반환된 키 수추출배트맨 토토이것을 위해질의데이텀. 의 각 요소확인인덱싱된 항목인 경우 배열은 TRUE입니다. 해당 배트맨 토토 키를 포함합니다. 즉, if (check[i] == TRUE)의 i번째 키추출배트맨 토토결과 배열이 다음에 있습니다. 색인이 생성된 항목입니다. 원본질의다음 경우에 데이터가 전달됩니다.일관됨메소드는 다음을 수행해야 합니다. 상담해 보세요. 그도 마찬가지입니다.배트맨 토토키[]그리고nullFlags[]이전에 반환한 배열추출배트맨 토토. extra_data반환된 추가 데이터 배열입니다. 으로추출배트맨 토토, 또는 다음의 경우 NULL 없음.

언제추출배트맨 토토반환 널 키 입력배트맨 토토키[], 해당확인[]요소는 인덱싱된 항목에 null 키가 포함되어 있으면 TRUE입니다. 즉, 의 의미론확인[]같습니다다음과 다르지 않습니다.일관됨함수는 해당하는 것을 조사하십시오.nullFlags[]요소가 다음을 알려야 하는 경우 일반 값 일치와 null의 차이점 일치합니다.

성공하면,*다시 확인해야 합니다 힙 튜플을 다시 확인해야 하는 경우 TRUE로 설정 쿼리 연산자이거나 인덱스 테스트가 정확한 경우 FALSE입니다. 즉, FALSE 반환 값은 힙이 튜플이 쿼리와 일치하지 않습니다. 다음의 TRUE 반환 값:*다시 확인거짓 보증으로 설정됨 힙 튜플이 쿼리와 일치하는지 확인합니다. 그리고 TRUE 수익 가치를 부여하다*다시 확인TRUE로 설정됨 이는 힙 튜플이 쿼리와 일치할 수 있음을 의미합니다. 쿼리를 평가하여 가져와서 다시 확인해야 합니다. 원래 색인이 생성된 항목에 대해 직접 연산자를 사용합니다.

선택적으로 다음에 대한 연산자 클래스다섯 번째 메소드를 제공할 수 있습니다:

int ComparePartial(데이텀 부분 키, 데이텀 키, 전략 번호 n, 포인터 extra_data)

부분 일치 쿼리 키를 인덱스 키와 비교하세요. 결과를 나타내는 부호가 있는 정수를 반환합니다. 0보다 크면 인덱스 키가 쿼리와 일치하지 않음을 의미하지만 인덱스 스캔은 계속되어야 합니다. 0은 인덱스를 의미합니다. 키가 쿼리와 일치합니다. 0보다 큰 것은 다음을 나타냅니다. 더 이상 일치하는 항목이 없으므로 인덱스 스캔이 중지되어야 합니다. 가능합니다. 전략 번호n의 부분 일치 쿼리를 생성한 연산자는 다음과 같습니다. 단, 의미론이 결정하기 위해 필요한 경우 스캔을 종료할 때. 또한,extra_data은 해당 요소입니다. 다음에 의해 만들어진 추가 데이터 배열추출배트맨 토토, 또는 없으면 NULL입니다. 널 키 이 함수에 전달되지 않습니다.

지원하기 위해"부분 일치"쿼리, 연산자 클래스는 다음을 제공해야 합니다.비교부분방법 및 해당추출배트맨 토토메서드는 다음을 설정해야 합니다.pmatch20033_2009554.3.2항자세한 내용은.

다양한 실제 데이터 유형데이텀위에 언급된 값은 다음에 따라 다릅니다. 운영자 클래스. 전달된 항목 값추출값항상 연산자 클래스에 속합니다. 입력 유형이며 모든 키 값은 클래스의 것이어야 합니다.저장유형. 의 유형질의인수 전달됨추출배트맨 토토그리고일관적인다음으로 지정된 것은 무엇이든 다음으로 식별되는 클래스 멤버 연산자의 오른쪽 입력 유형 전략 번호. 항목 유형과 동일할 필요는 없습니다. 올바른 유형의 키 값을 추출할 수 있는 한 그것.