그림과 같이표 37.8, btree는 하나의 필수 지원 기능과 두 개의 선택적 지원 기능을 정의합니다.
btree 연산자 계열이 비교 연산자를 제공하는 데이터 유형의 각 조합에 대해 다음에 등록된 비교 지원 기능을 제공해야 합니다.pg_amproc지원 기능 번호 1 및amproclefttype/amprorighttype비교를 위한 왼쪽 및 오른쪽 데이터 유형과 같습니다(즉, 일치하는 연산자가 등록된 것과 동일한 데이터 유형pg_amop). 비교 함수는 null이 아닌 두 개의 값을 취해야 합니다.A그리고B그리고을 반환합니다.int32값은< 0, 0또는 0언제A < B, A = B또는A B입니다. Null 결과는 허용되지 않습니다. 데이터 유형의 모든 값은 비교할 수 있어야 합니다. 참조src/backend/access/nbtree/nbtcompare.c예를 들어.
비교된 값이 조합 가능한 데이터 유형인 경우 표준을 사용하여 적절한 조합 OID가 비교 지원 함수에 전달됩니다.PG_GET_COLLATION()기계장치.
선택적으로 btree 운영자 제품군이 제공할 수 있음정렬 지원함수, 지원 함수 번호 2에 등록되어 있습니다. 이 함수를 사용하면 순진하게 비교 지원 함수를 호출하는 것보다 더 효율적인 방법으로 정렬 목적으로 비교를 구현할 수 있습니다. 이에 관련된 API는 다음에서 정의됩니다.src/include/utils/sortsupport.h.
선택적으로 btree 운영자 제품군이 제공할 수 있음범위 내지원 기능, 지원 기능 번호 3에 등록되어 있습니다. 이는 btree 인덱스 작업 중에는 사용되지 않습니다. 오히려 연산자 계열의 의미를 확장하여를 포함하는 창 절을 지원할 수 있습니다.범위 오프셋 이전그리고범위 오프셋 팔로우프레임 경계 유형(참조섹션 4.2.8). 기본적으로 제공되는 추가 정보는 를 더하거나 빼는 방법입니다.오프셋가족의 데이터 순서와 호환되는 방식으로 값을 지정합니다.
안범위 내함수에는 서명이 있어야 합니다
범위 내(발유형1,베이스유형1,오프셋유형2,하위부울,적음부울) 부울을 반환합니다
발그리고베이스연산자 계열에서 지원하는 유형 중 하나인 동일한 유형이어야 합니다(즉, 순서를 제공하는 유형). 그러나오프셋다른 유형일 수 있으며, 이는 가족이 지원하지 않는 유형일 수 있습니다. 예를 들어 내장된time_ops가족은 다음을 제공합니다범위 내함수오프셋유형간격. 가족이 제공할 수 있습니다.in_range지원되는 유형 및 하나 이상의 기능오프셋유형. 각각범위 내함수는 다음에 입력되어야 합니다pg_amproc와amproclefttype같음유형1그리고amprorighttype같음유형2.
an의 본질적인 의미범위 내함수는 두 개의 부울 플래그 매개변수에 따라 달라집니다. 더하거나 빼야 합니다베이스그리고오프셋그런 다음 비교발결과에 다음과 같이 표시됩니다.
if!하위그리고!적음, 복귀발 = (베이스 + 오프셋)
if!하위그리고적음, 반환발 <= (베이스 + 오프셋)
if하위그리고!적음, 반환발 = (베이스 - 오프셋)
if하위그리고적음, 복귀발 <= (베이스 - 오프셋)
그렇게 하기 전에 함수는 다음의 부호를 확인해야 합니다.오프셋: 0보다 작으면 오류 발생ERRCODE_INVALID_PRECEDING_OR_FOLLOWING_SIZE(22013) 다음과 같은 오류 텍스트 포함“창 함수의 이전 또는 다음 크기가 잘못되었습니다.”. (비표준 연산자 계열은 의미상 필요성이 거의 없어 이 제한을 무시할 수도 있지만 이는 SQL 표준에서 요구됩니다.) 이 요구 사항은 다음으로 위임됩니다.범위 내핵심 코드가 무엇을 이해할 필요가 없도록 함수“0보다 작음”특정 데이터 유형을 의미합니다.
추가적인 기대는 다음과 같습니다.범위 내함수는 가능하다면 오류 발생을 피해야 합니다.베이스 + 오프셋또는베이스 - 오프셋오버플로될 것입니다. 해당 값이 데이터 유형의 범위를 벗어나더라도 올바른 비교 결과를 확인할 수 있습니다. 데이터 유형에 다음과 같은 개념이 포함되어 있는 경우 주의하세요.“무한대”또는“NaN”, 이를 보장하려면 특별한 주의가 필요할 수 있습니다.in_range의 결과는 연산자 계열의 일반적인 정렬 순서와 일치합니다.
의 결과범위 내함수는 연산자 계열이 적용한 정렬 순서와 일치해야 합니다. 정확하게 말하자면, 고정된 값이 주어지면오프셋그리고하위, 다음:
만약범위 내함께적음= 일부에게는 true가 true임발1그리고베이스, 모든 경우에 해당되어야 합니다.발2 <= val1동일하게베이스.
만약범위 내함께적음= 일부에게는 true가 false임발1그리고베이스, 모든 경우에 대해 false여야 합니다.발2 = 발1동일하게베이스.
만약범위 내함께적음= 일부에게는 true가 true임발그리고베이스1, 모든 경우에 해당되어야 합니다.베이스2 = 베이스1동일하게발.
만약범위 내함께적음= 일부에게는 true가 false임발그리고베이스1, 모든 경우에 대해 false여야 합니다.베이스2 <= 베이스1동일하게발.
조건이 반전된 유사한 진술은 다음과 같은 경우에 유지됩니다.적음= 거짓.
주문되는 유형(유형1)이 조합 가능하면 적절한 조합 OID가범위 내함수, 표준 PG_GET_COLLATION() 메커니즘을 사용합니다.
범위 내함수는 NULL 입력을 처리할 필요가 없으며 일반적으로 엄격으로 표시됩니다.