F.19. intarray - 롤 토토의 배열 조작#

theintarray모듈은 널없는 롤 토토를 조작하기위한 여러 가지 유용한 기능과 연산자를 제공합니다. 일부 연산자를 사용하여 인덱스 검색을 지원합니다.

제공된 배열에 널 요소가 포함 된 경우 이러한 모든 작업에 오류가 발생합니다.

이러한 작업 중 다수는 1 차원 배열에만 합리적입니다. 더 많은 치수의 입력 배열을 수락하지만 데이터는 스토리지 순서의 선형 배열 인 것처럼 취급됩니다.

이 모듈이 고려됩니다신뢰Create현재 데이터베이스의 권한.

F.19.1. intarray기능 및 연산자#

intarray모듈에 표시테이블 F.8, 연산자테이블 F.9.

표 F.8. intarray기능

기능

설명

예제

iCount(롤 토토 []) →롤 토토

배열의 요소 수를 반환합니다.

iCount ( '1,2,3':: 롤 토토 [])3

정렬(롤 토토 [], dir 텍스트) →롤 토토 []

배열을 오름차순 또는 내림차순으로 정렬합니다.dirASC또는desc.

sort ( '1,3,2':: 롤 토토 [], 'desc')3,2,1

Sort(롤 토토 []) →롤 토토 []

Sort_asc(롤 토토 []) →롤 토토 []

오름차순 순서로 정렬.

sort (배열 [11,77,44])11,44,77

Sort_desc(롤 토토 []) →롤 토토 []

내림차순으로 정렬.

Sort_desc (배열 [11,77,44])77,44,11

UNIQ(롤 토토 []) →롤 토토 []

인접한 복제를 제거합니다. 자주Sort모든 복제물을 제거하려면

uniq ( '1,2,2,3,1,1':: integer [])1,2,3,1

uniq (sort ( '1,2,3,2,1':: 롤 토토 [])1,2,3

idx(롤 토토 [], 항목 롤 토토) →롤 토토

첫 번째 배열 요소의 인덱스를 반환항목또는 일치하지 않으면 0.

idx (배열 [11,22,33,22,11], 22)2

서브 어레이(롤 토토 [], 시작 Integer, Len Integer) →롤 토토 []

위치에서 시작하는 배열 부분을 추출시작, withLen요소.

서브 어레이 ( '1,2,3,2,1':: 롤 토토 [], 2, 3)2,3,2

서브 어레이(롤 토토 [], 시작 Integer) →롤 토토 []

위치에서 시작하는 배열 부분을 추출시작.

서브 어레이 ( '1,2,3,2,1':: 롤 토토 [], 2)2,3,2,1

intset(Integer) →롤 토토 []

단일 요소 배열을 만듭니다.

intset (42)42


표 F.9. intarray운영자

운영자

설명

롤 토토 [] && 롤 토토 []부울

어레이 오버랩 (적어도 하나의 요소가 공통 요소가 있습니까?)

롤 토토 [] @ 롤 토토 []부울

왼쪽 배열이 오른쪽 배열을 포함합니까?

롤 토토 [] <@ 롤 토토 []부울

왼쪽 배열이 오른쪽 배열에 포함되어 있습니까?

# 롤 토토 []Integer

배열의 요소 수를 반환합니다.

롤 토토 [] # 롤 토토롤 토토

오른쪽 인수와 일치하는 첫 번째 배열 요소의 인덱스를 반환하거나 일치하지 않으면 0. (동일idx기능.)

롤 토토 [] + Integer롤 토토 []

배열 끝에 요소를 추가합니다.

롤 토토 [] + 롤 토토 []롤 토토 []

배열을 연결합니다.

롤 토토 [] - Integer롤 토토 []

배열에서 올바른 인수와 일치하는 항목을 제거합니다.

롤 토토 [] - 롤 토토 []롤 토토 []

왼쪽 배열에서 오른쪽 배열의 요소를 제거합니다.

롤 토토 [] | Integer롤 토토 []

논쟁의 연합을 계산합니다.

롤 토토 [] | 롤 토토 []롤 토토 []

논쟁의 연합을 계산합니다.

롤 토토 [] & 롤 토토 []롤 토토 []

인수의 교차점을 계산합니다.

롤 토토 [] @@ query_int부울

배열은 쿼리를 만족합니까? (아래 참조)

query_int ~~ 롤 토토 []부울

배열은 쿼리를 만족합니까? (의 정류자@@)


연산자&&, @and<@PostgreSQL의 내장 된 운영자는 동일한 이름의 내장 연산자가 널이 포함되지 않은 롤 토토 배열에서만 작동하는 반면 내장 연산자는 모든 어레이 유형에서 작동합니다. 이 제한은 많은 경우 내장 운영자보다 빠르게 가능합니다.

the@@and~~운영자는 배열이 a를 충족하는지 테스트합니다.쿼리, 이는 전문 데이터 유형의 값으로 표현됩니다query_int. 에이쿼리는 어레이의 요소에 대해 확인되는 롤 토토 값으로 구성되며 연산자를 사용하여 결합 가능&(및),|(또는) 및!(아님). 괄호는 필요에 따라 사용할 수 있습니다. 예를 들어, 쿼리1 & (2 | 3)1을 포함하고 2 또는 3을 포함하는 어레이를 일치시킵니다.

F.19.2. 인덱스 지원#

intarray에 대한 색인 지원 제공&&, @@@운영자 및 일반 배열 평등.

두 개의 매개 변수화 된 GIST 인덱스 연산자 클래스가 제공됩니다 :gist__int_ops(기본적으로 사용)는 중소형 데이터 세트에 적합하지만gist__intbig_ops더 큰 서명을 사용하고 큰 데이터 세트 (즉, 다수의 고유 한 배열 값을 포함하는 열)를 색인화하는 데 더 적합합니다. 구현은 손실 압축이 내장 된 RD-Tree 데이터 구조를 사용합니다.

gist__int_ops롤 토토 범위의 배열로 롤 토토 세트를 근사화합니다. 선택적 롤 토토 매개 변수Numranges하나의 인덱스 키에서 최대 범위의 범위 수를 결정합니다. 의 기본값Numranges는 100입니다. 유효한 값은 1에서 253 사이입니다. GIST 인덱스 키가 더 정확한 검색으로 이어지는 더 큰 배열을 더 정확하게 검색하고 더 큰 인덱스의 비용으로 더 정확한 검색 (인덱스의 작은 부분을 스캔하고 힙 페이지가 적음)으로 이어집니다.

gist__intbig_ops비트 맵 서명으로 롤 토토 세트를 근사화합니다. 선택적 롤 토토 매개 변수Siglen시그니처 길이를 바이트로 결정합니다. 기본 서명 길이는 16 바이트입니다. 서명 길이의 유효한 값은 1 내지 2024 바이트입니다. 서명이 길어 더 큰 인덱스 비용으로 더 정확한 검색 (인덱스의 작은 부분과 더 적은 힙 페이지를 스캔)으로 이어집니다.

비 디폴트 진 운영자 클래스도 있습니다gin__int_ops,이 연산자와 지원을 지원하는<@.

GIST와 GIN 인덱싱 사이의 선택은 GIST와 GIN의 상대적인 성능 특성에 따라 다릅니다.

F.19.3. 예#

- 메시지는 하나 이상일 수 있습니다섹션테이블 메시지 작성 (Mid int 기본 키, 섹션 int [], ...);

- 서명 길이 32 바이트로 특수 인덱스 생성
GIST를 사용하여 메시지에서 index message_rdtree_idx를 만듭니다 (섹션 GIST__INTBIG_OPS (siglen = 32));

- 섹션 1 또는 2에서 메시지 선택 - 연산자 중첩
Message.Sections && '1,2';

- 섹션 1 및 2에서 메시지 선택 - 운영자가 포함됩니다.
message.sections.sections @ '1,2';

- 쿼리 연산자를 사용하여 동일합니다
Message.sections.sections.sections.sections.sections.sections.sections.mid를 선택하십시오.

F.19.4. 기준#

소스 디렉토리Contrib/Intarray/Bench벤치 마크 테스트 스위트가 포함되어 있으며 설치된 것에 대해 실행할 수 있습니다PostgreSQL서버. (또한 필요dbd :: pg설치하려면.) 실행 :

CD .../contrib/intarray/벤치
생성 된 테스트
PSQL -C "확장 INTARRAY 만들기"테스트
./create_test.pl | PSQL 테스트
./Bench.pl

theBench.pl스크립트는 수많은 옵션이 있으며, 인수없이 실행될 때 표시됩니다.

F.19.5. 저자#

모든 작업은 Teodor Sigaev (에 의해 수행되었습니다.) 및 Oleg Bartunov (). 보다http : //www.sai.msu.su/~megera/postgres/gist/추가 정보. Andrey Oktyabrski는 새로운 기능과 운영을 추가하는 데 큰 노력을 기울였습니다.

정정 제출

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