이 문서는 롤 토토되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 36.16. 와이즈 토토에 대한 확장 인터페이스버전 또는 위에 나열된 다른 롤 토토 버전 중 하나입니다.

33.13. 인터페이스

지금까지 설명한 절차를 통해 새로운 유형을 정의 할 수 있습니다.운영자 클래스

참고 :이전postgresql릴리스 7.3, 필요했습니다pg_amop, pg_amprocpg_opclassa운영자 생성, 훨씬 간단하고 오류가 덜 발생합니다.

33.13.1.

thePG_AM테이블에는 하나가 포함되어 있습니다postgresql이지만 모든 색인 메소드가 있습니다PG_AM. 그것은PG_AM--- 그러나 그것은 범위를 훨씬 뛰어 넘습니다

인덱스 방법의 루틴은 직접 알지 못합니다.운영자여기서-an과 함께 사용할 수있는 사고 연산자롤 토토 절차여기서-Clause 연산자와 함께 사용할 수 있습니다

동일한 연산자 클래스 이름을 여러 곳에서 사용할 수 있습니다.OID_OPS), 그러나 그러한 클래스는 독립적입니다

33.13.2. 색인 메소드 전략

운영자 클래스와 관련된 연산자는 다음과 같습니다"전략 번호",""보다 작습니다.and""보다 크거나 동일합니다.흥미 롭습니다postgresql사용자가 정의 할 수 있습니다postgresql할 수 없습니다<또는> =)"전략"

B- 트리 색인 메소드는 5 가지 전략을 정의합니다.테이블.

표 33-2. B- 트리 전략

작동 전략 번호
보다 작음 1
보다 작거나 동등한 2
Equal 3
더 크거나 평등 4
보다 큰 5

해시 인덱스는 비트 동등성 만 표현하므로 사용합니다.표 33-3.

표 33-3. 해시 전략

작동 전략 번호
Equal 1

R-Tree Indexes Express 직사각형 함유 관계.표 33-4.

표 33-4. R- 트리 전략

작동 전략 번호
왼쪽 1
왼쪽 또는 중첩 2
중첩 3
오른쪽 또는 중첩 4
오른쪽 5
동일 6
포함 7
포함 8

GIST 인덱스는 훨씬 더 유연합니다."일관성"각 특정의 롤 토토 루틴

모든 전략 운영자는 부울 값을 반환합니다. ~ 안에부울여기서인덱스와 함께 사용할 조항

그건 그렇고,Amorderstrategy열에서 열PG_AMAmorderstrategy입니다Amorderstrategy= 1,""보다 작습니다.전략 번호.

33.13.3. 색인 방법 롤 토토

전략은 일반적으로 시스템에 대한 정보가 충분하지 않습니다

전략과 마찬가지로 운영자 클래스는 어떤 식별합니다"롤 토토 기능 번호".

B- 트리는 단일 롤 토토 함수가 필요합니다.표 33-5.

표 33-5. B- 트리 롤 토토 기능

기능 롤 토토 번호
두 키를 비교하고 정수를보다 적게 반환하십시오 1

해시 인덱스 마찬가지로 하나의 롤 토토 함수가 필요합니다.테이블.

표 33-6. 해시 롤 토토 기능

기능 롤 토토 번호
키의 해시 값 계산 1

R- 트리 인덱스에는 3 개의 롤 토토 함수가 필요합니다.테이블.

표 33-7. R- 트리 롤 토토 기능

기능 롤 토토 번호
Union 1
교차로 2
size 3

GIST 인덱스에는 7 개의 롤 토토 기능이 필요합니다.테이블.

표 33-8. GIST 롤 토토 기능

기능 롤 토토 번호
일관성 1
Union 2
압축 3
Decompress 4
페널티 5
picksplit 6
Equal 7

전략 운영자와 달리 롤 토토 기능 반환

33.13.4. 예

이제 우리는 아이디어를 보았으니 여기에 약속이 있습니다.SRC/Tutorial/Complex.candsrc/튜토리얼/complex.sql소스에서complex_abs_ops. 먼저, 우리는 필요합니다섹션 33.11. For an

  • 절대-값이 적음 (전략 1)
  • 절대 값은 평등 한 것보다 덜 (전략
  • 절대 값 평등 (전략 3)
  • 절대 값은 평등 한 것보다 더 큰 값 (전략
  • 절대 값보다 큰 절대 값 (전략

관련 세트를 정의하는 최소 오류가 발생하기 쉬운 방법

#define mag (c) ((c)-> x*(c)-> x + (c)-> y*(c)-> y)

이제 기능보다 적은 기능은

pg_function_info_v1 (complex_abs_lt);

다른 네 가지 기능은 그들이 비교하는 방법에만 다릅니다.

다음에 우리는 기능과 연산자를

함수 만들기 complex_abs_lt (복잡한, 복잡한) bool을 반환합니다filename','complex_abs_lt '

올바른 통근자를 지정하는 것이 중요합니다

주목할만한 다른 일이 여기에서 일어나고 있습니다 :

  • 이름이 하나만있을 수 있습니다.=및 유형 가져 오기복잡한두 피연산자 모두. 이 경우 우리는=for복잡한그러나 우리가 건축중인 경우=일반 평등 작전이되기 위해complex_abs_eq.

  • 비록postgresqlcanabs_eq. 일반적으로 좋은 관행입니다

  • 우리는를 만들 수있었습니다postgresql함수 이름abs_eq, 의존postgresql그것을 구별합니다postgresql같은 이름의 함수.postgresql레벨.

다음 단계는 롤 토토 루틴 등록입니다.

함수 만들기 complex_abs_cmp (복잡하고 복잡한)filename'

이제 필요한 연산자와 롤 토토 루틴을 보유하고 있습니다.

운영자 클래스 complex_abs_ops 만들기

그리고 우리는 끝났습니다! 이제 만들고 사용할 수 있어야합니다복잡한

우리는 운영자 항목을 더 구두로 쓸 수있었습니다.

연산자 1 <(복잡한, 복잡한),

그러나 운영자가

위의 예는이 새로운 것을 만들고 싶다고 가정합니다.복잡한데이터 유형. 그렇지 않다면, 그냥기본.

33.13.5. 시스템 의존성

postgresql운영자를 사용합니다

특히와 같은 SQL 기능이 있습니다.주문and별도의값의 비교 및 ​​정렬이 필요합니다. 구현하려면postgresql기본 B- 트리를 찾습니다"Equals"이 운영자 클래스의 구성원은 정의합니다그룹 byand별도의,주문주문.

사용자 정의 유형의 배열 비교도 의존합니다

데이터에 대한 기본 B-Tree 연산자 클래스가없는 경우

데이터 유형에 대한 기본 연산자 클래스가 없으면"를 식별 할 수 없었습니다이 SQL 기능을 사용하려는 경우

참고 :inpostgresql7.4 이전 버전,=, <. 그만큼

33.13.6. 운영자의 특수 기능

운영자 클래스에는 두 가지 특별한 기능이 있습니다.

일반적으로 운영자의 구성원으로 연산자를 선언합니다.여기서조건

선택 *에서 integer_column <4; 테이블에서 선택

정수의 B-Tree 지수에 의해 정확히 충족 될 수 있습니다.여기서조건"Lossy"운영자의 경우다시 확인to the운영자절의 조항운영자 클래스 만들기명령.다시 확인인덱스 인 경우 유효합니다

우리가 보관하는 상황을 다시 고려하십시오.Box. 이것스토리지옵션운영자 클래스 만들기: 우리는

운영자 클래스 Polygon_ops 만들기

현재, Gist Index 메소드 만 롤 토토합니다.스토리지열과 다른 유형압축andDecompress롤 토토 루틴이 처리해야합니다스토리지사용됩니다.