지금까지 설명한 절차를 통해 새로운 유형을 정의 할 수 있습니다.운영자 클래스새
참고 :이전postgresql릴리스 7.3, 필요했습니다
pg_amop
,pg_amproc
및pg_opclass
a운영자 생성, 훨씬 간단하고 오류가 덜 발생합니다.
thePG_AM
테이블에는 하나가 포함되어 있습니다postgresql이지만 모든 색인 메소드가 있습니다PG_AM
. 그것은PG_AM
--- 그러나 그것은 범위를 훨씬 뛰어 넘습니다
인덱스 방법의 루틴은 직접 알지 못합니다.운영자여기서-an과 함께 사용할 수있는 사고 연산자롤 토토 절차여기서-Clause 연산자와 함께 사용할 수 있습니다
동일한 연산자 클래스 이름을 여러 곳에서 사용할 수 있습니다.OID_OPS), 그러나 그러한 클래스는 독립적입니다
운영자 클래스와 관련된 연산자는 다음과 같습니다"전략 번호",""보다 작습니다.and""보다 크거나 동일합니다.흥미 롭습니다postgresql사용자가 정의 할 수 있습니다postgresql할 수 없습니다<또는> =)"전략"
B- 트리 색인 메소드는 5 가지 전략을 정의합니다.테이블.
해시 인덱스는 비트 동등성 만 표현하므로 사용합니다.표 33-3.
R-Tree Indexes Express 직사각형 함유 관계.표 33-4.
GIST 인덱스는 훨씬 더 유연합니다."일관성"각 특정의 롤 토토 루틴
모든 전략 운영자는 부울 값을 반환합니다. ~ 안에부울여기서인덱스와 함께 사용할 조항
그건 그렇고,Amorderstrategy열에서 열PG_AM
Amorderstrategy입니다Amorderstrategy= 1,""보다 작습니다.전략 번호.
전략은 일반적으로 시스템에 대한 정보가 충분하지 않습니다
전략과 마찬가지로 운영자 클래스는 어떤 식별합니다"롤 토토 기능 번호".
B- 트리는 단일 롤 토토 함수가 필요합니다.표 33-5.
해시 인덱스 마찬가지로 하나의 롤 토토 함수가 필요합니다.테이블.
R- 트리 인덱스에는 3 개의 롤 토토 함수가 필요합니다.테이블.
GIST 인덱스에는 7 개의 롤 토토 기능이 필요합니다.테이블.
전략 운영자와 달리 롤 토토 기능 반환
이제 우리는 아이디어를 보았으니 여기에 약속이 있습니다.SRC/Tutorial/Complex.candsrc/튜토리얼/complex.sql소스에서complex_abs_ops. 먼저, 우리는 필요합니다섹션 33.11. For an
관련 세트를 정의하는 최소 오류가 발생하기 쉬운 방법
#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 <(복잡한, 복잡한),
그러나 운영자가
위의 예는이 새로운 것을 만들고 싶다고 가정합니다.복잡한데이터 유형. 그렇지 않다면, 그냥기본.
postgresql운영자를 사용합니다
특히와 같은 SQL 기능이 있습니다.주문and별도의값의 비교 및 정렬이 필요합니다. 구현하려면postgresql기본 B- 트리를 찾습니다"Equals"이 운영자 클래스의 구성원은 정의합니다그룹 byand별도의,주문주문.
사용자 정의 유형의 배열 비교도 의존합니다
데이터에 대한 기본 B-Tree 연산자 클래스가없는 경우
데이터 유형에 대한 기본 연산자 클래스가 없으면"를 식별 할 수 없었습니다이 SQL 기능을 사용하려는 경우
참고 :inpostgresql7.4 이전 버전,=, <및. 그만큼
운영자 클래스에는 두 가지 특별한 기능이 있습니다.
일반적으로 운영자의 구성원으로 연산자를 선언합니다.여기서조건
선택 *에서 integer_column <4; 테이블에서 선택
정수의 B-Tree 지수에 의해 정확히 충족 될 수 있습니다.여기서조건"Lossy"운영자의 경우다시 확인to the운영자절의 조항운영자 클래스 만들기명령.다시 확인인덱스 인 경우 유효합니다
우리가 보관하는 상황을 다시 고려하십시오.Box. 이것스토리지옵션운영자 클래스 만들기: 우리는
운영자 클래스 Polygon_ops 만들기
현재, Gist Index 메소드 만 롤 토토합니다.스토리지열과 다른 유형압축andDecompress롤 토토 루틴이 처리해야합니다스토리지사용됩니다.