63.3. B- 트리 지원 기능

표 37.9, Btree는 필요한 하나와 4 개의 선택적 지원 기능을 정의합니다. 5 가지 사용자 정의 방법은 다음과 같습니다.

Order

BTREE 운영자 제품군이 비교 연산자에게 제공하는 데이터 유형의 각 조합에 대해 비교 지원 기능을 제공해야합니다.PG_AMPROC지원 기능 번호 1 및amproclefttype/amprocrighttype비교를 위해 왼쪽 및 오른쪽 데이터 유형과 동일합니다 (즉, 일치하는 연산자가 in에 등록되는 동일한 데이터 유형PG_AMOP). 비교 함수는 두 개의 null 값을 취해야합니다aandBretoy anint32< 0, 0또는 0whena < B, a = B또는a B8463_8562src/backend/access/nbtree/nbtcompare.c예제.

비교 값이 Collatable Data Type 인 경우 적절한 Collation OID는 표준을 사용하여 비교 지원 기능으로 전달됩니다.pg_get_collation ()메커니즘.

SortsUpport

선택적으로 Btree 운영자 가족이 제공 할 수 있습니다정렬 지원지원 기능 번호 2에 등록 된 함수.이 기능을 사용하면 비교 지원 기능을 순진하게 호출하는 것보다 더 효율적인 방식으로 정렬 목적으로 비교를 구현할 수 있습니다. 이것에 관련된 API는에 정의됩니다.src/include/utils/sortsupport.h.

in_Range

선택적으로 Btree 운영자 가족이 제공 할 수 있습니다in_Range지원 기능 기능 번호 3에 등록 된 지원 기능. BTREE 지수 작업 중에 사용되지 않습니다. 오히려, 그들은 운영자 가족의 의미를 확장하여을 포함하는 창 절을 지원할 수 있습니다.범위 오프셋 선행범위 오프셋 다음프레임 바운드 유형 (참조섹션 4.2.8). 기본적으로 제공된 추가 정보는 AD를 추가하거나 빼는 방법입니다.오프셋가족의 데이터 순서와 호환되는 방식으로 가치가 있습니다.

anin_Range함수는 서명이 있어야합니다

in_Range (valtype1,basetype1,오프셋type2,subbool,Lessbool)
반품 bool

valandbase는 동일한 유형이어야하며, 이는 운영자 제품군이 지원하는 유형 중 하나입니다 (즉, 주문을 제공하는 유형). 하지만,오프셋다른 유형 일 수 있으며, 그렇지 않으면 가족이지지하지 않을 수 있습니다. 예를 들어 내장time_ops가족 제공in_Range오프셋OF TYPE간격. 가족이 제공 할 수 있습니다in_Range지원되는 유형 및 하나 이상의 기능오프셋유형. 각in_Range함수를 입력해야합니다PG_AMPROCwithamproclefttype동일type1andamprocrighttype동일type2.

an의 필수 의미in_Range함수는 두 부울 플래그 매개 변수에 따라 다릅니다. 추가하거나 빼야base오프셋, 그런 다음 비교val다음과 같이 결과에 :

  • if!suband!Less, returnval =(Base + 오프셋)

  • if!subandLess, returnval <=(베이스 + 오프셋)

  • ifsub!Less, returnval =(Base - 오프셋)

  • ifsubandLess, returnval <=(베이스 - 오프셋)

그렇게하기 전에 함수는의 부호를 확인해야합니다.오프셋: 0보다 작은 경우 오류를 올리십시오errcode_invalid_preceding_or_following_size(22013) 오류 텍스트와 같은창 함수의 이전 또는 다음 크기 전 또는 다음 크기. (비표준 운영자 패밀리는 아마도이 제한을 무시하기로 선택할 수 있지만 SQL 표준에 의해 필요합니다. 이에 대한 의미 론적 필요성이 거의 없기 때문에이 요구 사항은에 위임된다.in_Range핵심 코드가 무엇을 이해할 필요가 없도록 함수0보다 작음특정 데이터 유형을 의미합니다.

추가적인 기대는입니다.in_Range윈 토토은 실용적이라면 오류를 던지지 않아야합니다.베이스 + 오프셋또는베이스 - 오프셋오버플로. 해당 값이 데이터 유형 범위를 벗어난 경우에도 올바른 비교 결과를 결정할 수 있습니다. 데이터 유형에과 같은 개념이 포함 된 경우Infinity또는NANin_Range의 결과는 운영자 제품군의 정상 정렬 순서에 동의합니다.

결과의 결과in_Range함수는 운영자 제품군이 부과하는 정렬 순서와 일치해야합니다. 고정 된 값이를 감안할 때 정확하게오프셋andsub, 다음 :

  • ifin_RangewithLess= 일부는 trueval1andBase, 모든 것에 대해 사실이어야합니다Val2 <= val1같은Base.

  • ifin_RangewithLess= 일부는 일부는 falseval1andBase, 모든 것에 대해 거짓이어야합니다Val2 = val1같은base.

  • ifin_RangewithLess= 일부는 참입니다valandBase1, 모든 것에 대해 사실이어야합니다Base2 = Base1같은val.

  • ifin_RangewithLess= 일부는 일부는 falsevalandBase1, 모든 것에 대해 거짓이어야합니다Base2 <= Base1같은val.

반전 된 조건을 가진 유사한 진술은Less= false.

순서가있는 경우 (type1)는 Collatable입니다. 적절한 Collation OID가 전달됩니다in_Range표준 PG_GET_COLLATION () 메커니즘을 사용하여 함수.

in_Range함수는 널 입력을 처리 할 필요가 없으며 일반적으로 엄격하게 표시됩니다.

EqualImage

선택적으로 Btree 운영자 가족이 제공 할 수 있습니다EqualImage(평등은 이미지 평등을 암시합니다) 지원 기능 번호 4에 등록 된 지원 함수.이 기능을 사용하면 핵심 코드가 BTREE 중복 제거 최적화를 적용하는 것이 안전한시기를 결정할 수 있습니다. 현재,EqualImage윈 토토은 색인을 구축하거나 재건 할 때만 호출됩니다.

anEqualImage함수는 서명이 있어야합니다

EqualImage (opcintype OID) BOOL을 반환

반환 값은 운영자 클래스 및 Collation에 대한 정적 정보입니다. 반환trueOrder운영자 클래스의 함수는 반품 만 보장됩니다0(인수는 동일합니다) 때aandB인수는 의미 정보의 손실 없이도 상호 교환 할 수 있습니다. 등록하지 않음EqualImage기능 또는 반환거짓이 조건을 보유 할 수 없음을 나타냅니다.

theopcintype인수는pg_type.Oid운영자 클래스 인덱스 인 데이터 유형의. 이것은 동일한 기본을 재사용 할 수있는 편의입니다EqualImage운영자 클래스에서 윈 토토. 만약에opcintype는 Collatable Data 유형이며, 적절한 Collation OID가 전달됩니다.EqualImage표준 사용 함수pg_get_collation ()메커니즘.

운영자 클래스에 관한 한, 반환true중복 제거가 안전하다는 것을 나타냅니다 (또는 OID가 전달 된 Collation에 안전합니다EqualImage함수). 그러나 핵심 코드는 인덱스에 대한 중간 복제 만 안전하다고 간주합니다.Everyindexed 컬럼을 등록하는 연산자 클래스를 사용합니다EqualImage함수, 그리고 각 함수는 실제로 반환됩니다true전화 할 때.

이미지 평등은거의간단한 비트 평등과 동일한 조건. 한 가지 미묘한 차이가 있습니다 : Varlena 데이터 유형을 색인화 할 때, 두 이미지 동등한 기준의 온 디스크 표현은 일관되지 않은로 인해 약간 동일하지 않을 수 있습니다.토스트입력시 압축. 공식적으로 운영자 클래스의 경우EqualImage함수 반환truedatum_image_eq ()C 함수는 항상 운영자 클래스와 동의합니다Order함수 (동일한 Collation OID가 두 사람 모두에게 전달되는 경우EqualImageandOrder함수).

핵심 코드는 근본적으로를 추론 할 수 없습니다평등은 이미지 평등을 암시합니다같은 가족의 다른 운영자 클래스의 세부 사항을 기반으로 다중 데이터 유형 패밀리 내 운영자 클래스 상태. 또한 운영자 가족이 크로스 타입을 등록하는 것은 합리적이지 않습니다.EqualImage함수와 그렇게하려고 시도하면 오류가 발생합니다. 이건이기 때문입니다.평등은 이미지 평등을 암시합니다상태는 운영자 가족 수준에서 다소 정의되는 정렬/평등 의미에 의존하지 않습니다. 일반적으로 특정 데이터 유형이 구현하는 의미는 별도로 고려되어야합니다.

컨벤션과 Core에 포함 된 운영자 클래스가 뒤 따릅니다PostgreSQL배포는 주식을 등록하는 것입니다EqualImage함수. 대부분의 운영자 클래스 레지스터btequalimage (), 이는 중복 제거가 무조건 안전하다는 것을 나타냅니다. 와 같은 협의 가능한 데이터 유형에 대한 운영자 클래스텍스트레지스터btvarstrequalimage (), 이는 중복 제거가 결정 론적 콜라이트로 안전하다는 것을 나타냅니다. 타사 확장에 대한 모범 사례는 제어를 유지하기 위해 자신의 사용자 지정 윈 토토을 등록하는 것입니다.

옵션

선택적으로, B- 트리 운영자 제품군이 제공 할 수 있습니다옵션(운영자 클래스 특정 옵션) 지원 함수 5에 등록 된 지원 함수.

an옵션지원 함수는 서명이 있어야합니다

옵션 (repopts local_relopts *) 반환 void

함수가 a에 포인터가 전달됩니다.local_reloptsSTRUCT는 일련의 운영자 클래스 특정 옵션으로 채워야합니다. 옵션은를 사용하여 다른 지원 기능에서 액세스 할 수 있습니다.pg_has_opclass_options ()pg_get_opclass_options ()매크로

현재, B-Tree 운영자 클래스가 없음옵션지원 기능. B-Tree는 Gist, SP-Gist, Gin 및 Brin과 같은 키를 유연하게 표현할 수 없습니다. 그래서,옵션현재 B-Tree 인덱스 액세스 방법에 많은 응용 프로그램이 없을 것입니다. 그럼에도 불구하고,이지지 함수는 균일 성을 위해 B- 트리에 추가되었으며, 아마도 B- 트리의 추가 진화 중에PostgreSQL.

수정 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면