2010-03-06 8 views
0

참고 : m4가 사용되고 있으므로 "_"접두사가있는 문자열이 확장됩니다 (m4는 c 전처리 기와 유사한 매크로 전처리 기입니다).Postgres hashing 사용자 정의 유형

내 유형 :

CREATE TYPE UrlPair AS (              
    HostName  varchar(_LIMIT_HOSTNAME),        
    ScriptName  varchar(_LIMIT_SCRIPTNAME)        
); 

인덱스

CREATE INDEX SymbolTable_UrlPair_UrlPair 
    ON SymbolTable_UrlPair USING hash (UrlPair); 

으로

CREATE TABLE SymbolTable_UrlPair (
    Symbol   _BIG_SYMBOL_SERIAL_TYPE  PRIMARY KEY, 
    UrlPair   UrlPair      
); 

에서 사용을 제공합니다 :

psql:script:32: ERROR: data type urlpair has no default operator class 
for access method "hash" 

HINT: You must specify an operator class for the index or define a default 
operator class for the data type. 

질문

이상적으로 엔진이 문자열을 연결하여 해시를 사용하고 싶습니다. 그러나, 나는 까다 롭지 않다. 누군가가 나에게 액세스 메소드 해시에 대해이 "연산자 클래스"를 선언하는 구문을 표시 할 수 있습니까?

사용자 정의 유형에 대한 기본 해싱 동작을 예상했을 것입니다. 아마도 타입을 유지하기 위해 preffer 할 것입니다. 즉, 좀 더 정교한 UDT를 정의 할 것이므로, 그것을 확장하고 싶지는 않습니다.

답변

1

해싱과 해시 색인은 서로 다른 두 가지입니다. 해시 색인은 다중 열 색인을 지원하지 않습니다. 문제가 될 수 있습니다. 유형 UrlPair는 다중 값입니다.

Btree 색인에 어떤 문제가 있습니까? 어떤 문제를 해결해야합니까?

+0

매우 큰 데이터베이스의 URL 상징. Linear Hashed 인덱스는 문자열 AFAIK http://www.postgresql.org/docs/7.3/static/sql-createindex.html의 B- 트리보다 바람직합니다. 이 페이지에는 인덱싱 할 수있는 값을 반환하는 데 사용되는 'func_name'을 지정할 수 있다고 나와 있습니다. 나는 이것을 해독하여 UDT가 해쉬 될 수있는 하나의 엔티티를 반환 할 수있게 할 것이다. (내 경우에는 URL의 concatination). –

+0

Hmm에서 B-tree로 전환했습니다. 아마도 호스트 이름에 대해 범위 기반 검사를 사용하기 때문에 B- 트리를 고수 할 것입니다. 그러나 나는 여전히 접근 방법에 대한 구문에 관심이있을 것이다. –

+1

@hassan : 실제로 PostgreSQL 7.3을 사용하지 않고 있습니다. 그렇다면 가장 먼저 할 일은 지원되는 비 고대 버전을 얻는 것입니다. 그리고 대부분의 경우, btree 인덱스는 PostgreSQL의 해시보다 성능이 뛰어납니다. –

관련 문제