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

57.2. 확장성

인터페이스가 높습니다 액세스 방법 구현자만 필요한 추상화 수준 액세스되는 데이터 유형의 의미를 구현합니다.레이어 자체가 관리함 동시성, 트리 구조 로깅 및 검색.

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

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

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

두 개의 키(색인된 항목 아님!)를 비교하고 정수를 반환합니다. 0보다 작거나, 0이거나, 0보다 큼을 나타냅니다. 첫 번째 키는 두 번째 키보다 작거나 같거나 큽니다. 널 키는 이 함수에 전달되지 않습니다.

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

인덱싱할 항목이 주어지면 palloc'd 키 배열을 반환합니다. 반환된 키의 수는 다음 위치에 저장되어야 합니다.*nkeys. 키 중 하나라도 null이 될 수 있으면 palloc도 적용됩니다. 배열*nkeys 부울필드, 주소를 다음 위치에 저장하세요.*nullFlags, 필요에 따라 이러한 null 플래그를 설정합니다.*nullFlags남길 수 있음NULL(초기값) 모든 키가 null이 아닌 경우. 반환 값은 다음과 같습니다.NULL항목이 키가 없습니다.

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

쿼리할 값이 주어지면 palloc'd 키 배열을 반환합니다. 즉,질의값은 왼쪽이 다음과 같은 인덱싱 가능한 연산자의 오른쪽 색인이 생성된 열입니다.n전략이다 연산자 클래스 내의 연산자 번호(참조섹션 35.14.2). 종종,추출쿼리상담이 필요합니다n데이터 유형 결정질의및 키를 추출하는 데 사용해야 하는 방법 가치. 반환된 키의 수는 다음 위치에 저장되어야 합니다.*nkeys. 키 중 하나라도 null이 될 수 있으면 palloc도 적용됩니다. 배열*nkeys 부울필드, 주소를 다음 위치에 저장하세요.*nullFlags, 필요에 따라 이러한 null 플래그를 설정합니다.*nullFlags남길 수 있음NULL11562_11635NULL만약에질의키가 포함되어 있지 않습니다.

검색모드은 다음과 같은 출력 인수입니다. 허용합니다추출쿼리지정하다 검색이 수행되는 방법에 대한 세부 정보입니다. 만일*검색모드다음으로 설정됨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입니다. 만일*pmatch다음으로 설정됨NULL그러면 GIN은 부분 일치가 필요하지 않다고 가정합니다. 변수는 다음과 같이 초기화됩니다.NULL이전에 호출하므로 연산자 클래스에서는 이 인수를 무시할 수 있습니다. 부분 일치를 지원하지 않습니다.

extra_data은 다음과 같은 출력 인수입니다. 허용합니다추출쿼리통과하다 추가 데이터일관됨그리고비교부분메소드. 그것을 사용하려면,추출쿼리배열을 할당해야 합니다 의*nkeys포인터 및 주소 저장 에서*extra_data, 그런 다음 무엇이든 저장하세요. 개별 포인터를 원합니다. 변수가 초기화되었습니다. 에NULL호출하기 전에 이 인수는 추가 작업이 필요하지 않은 연산자 클래스에서는 단순히 무시됩니다. 데이터. 만일*extra_data설정되었습니다. 전체 배열이에 전달됩니다.일관됨메서드 및 해당 요소비교부분방법.

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

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

언제추출쿼리널을 반환합니다. 키 입력쿼리키[], 해당확인[]인덱싱된 경우 요소는 TRUE입니다. 항목에 null 키가 포함되어 있습니다. 즉, 의미론은확인[]같습니다고명하지 않음 보낸사람.일관됨함수 해당하는 것을 검사할 수 있습니다nullFlags[]일반 값 간의 차이를 알려야 하는 경우 요소 일치 및 null 일치.

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

선택적으로 다음에 대한 연산자 클래스다섯 번째 방법을 제공할 수 있습니다:

int ComparePartial(데이텀 부분 키, 데이텀 키, StrategyNumber n, 포인터 extra_data)

부분 일치 쿼리 키를 스포츠 토토 결과 키와 비교하세요. 반환 결과를 나타내는 부호를 갖는 정수: 0보다 작은 것은 스포츠 토토 결과 키가 쿼리와 일치하지 않지만 스포츠 토토 결과 스캔은 계속하다; 0은 스포츠 토토 결과 키가 쿼리와 일치함을 의미합니다. 0보다 크면 스포츠 토토 결과 스캔이 중지되어야 함을 나타냅니다. 더 이상의 경기는 불가능합니다. 전략 번호n부분 일치를 생성한 연산자 쿼리의 의미론이 필요한 경우 쿼리가 제공됩니다. 스캔을 종료할 때. 또한,extra_data이다 다음으로 만들어진 추가 데이터 배열의 해당 요소추출쿼리또는NULL없으면. Null 키는 절대 전달되지 않습니다. 기능.

지원하기 위해"부분 일치"쿼리, 연산자 클래스는 다음을 제공해야 합니다.비교부분방법 및 해당추출쿼리메소드는 다음을 설정해야 합니다pmatch18758_18818섹션 57.3.2용 세부사항.

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