이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : F.10. 메이저 토토 사이트-다차원 메이저 토토 사이트 데이터 유형버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

F.10. 큐브 — 다토토 큐브 데이터 유형#

이 모듈은 데이터 유형을 구현합니다.큐브다차원 큐브를 표현하기 위한 것입니다.

이 모듈은 고려됩니다.신뢰할 수 있는, 즉, 슈퍼유저가 아닌 사용자가 설치할 수 있습니다.만들기현재 데이터베이스에 대한 권한입니다.

F.10.1. 구문#

표 F.1에 대한 유효한 외부 표현을 보여줍니다.큐브유형.x, y등은 부동 소수점 숫자를 나타냅니다.

표 F.1. 큐브 외부 표현

외부 구문 의미
x 1토토 점(또는 길이가 0인 1토토 간격)
(x) 위와 동일
x1,x2,...,xn n차원 공간의 한 점, 내부적으로 부피가 0인 큐브로 표현됨
(x1,x2,...,xn) 위와 동일
(x),(y) 다음에서 시작하는 1차원 간격x다음으로 끝남y또는 그 반대로; 순서는 중요하지 않습니다.
[(x),(y)] 위와 동일
(x1,...,xn),(y1,...,yn) 대각선으로 반대쪽 모서리 쌍으로 표현되는 n차원 큐브
[(x1,...,xn),(y1,...,yn)] 위와 동일

큐브의 반대쪽 모서리가 어떤 순서로 입력되는지는 중요하지 않습니다.큐브유니폼을 생성하는 데 필요한 경우 함수가 자동으로 값을 교환합니다.왼쪽 하단 — 오른쪽 상단내부 표현. 모서리가 일치하면,큐브다음과 함께 한 모서리만 저장합니다.점입니다공간 낭비를 방지하기 위한 플래그입니다.

공백은 입력 시 무시되므로[(x),(y)]다음과 같습니다[ ( x ), ( y ) ].

F.10.2. 정밀도#

값은 내부적으로 64비트 부동 소수점 숫자로 저장됩니다. 즉, 유효 숫자가 약 16자리를 초과하면 잘립니다.

F.10.3. 사용법#

표 F.2유형에 대해 제공된 특수 연산자를 표시큐브.

표 F.2. 큐브 연산자

운영자

설명

큐브 && 큐브부울

큐브가 겹치나요?

큐브 @ 큐브부울

첫 번째 큐브에 두 번째 큐브가 포함되어 있습니까?

큐브 <@ 큐브부울

첫 번째 큐브가 두 번째 큐브에 포함되어 있습니까?

큐브 - 정수float8

추출n-큐브의 번째 좌표(1부터 계산).

큐브 ~ 정수float8

추출n-다음 방법으로 계산되는 큐브의 번째 좌표:n = 2 * k- 1은 하한을 의미합니다.k-번째 토토,n = 2 * k상한을 의미함k-번째 토토. 부정적인n은 해당 양의 좌표의 역값을 나타냅니다. 이 연산자는 KNN-GiST 지원을 위해 설계되었습니다.

큐브 <- 큐브float8

두 큐브 사이의 유클리드 거리를 계산합니다.

큐브 <# 큐브float8

두 큐브 사이의 택시(L-1 미터법) 거리를 계산합니다.

큐브 <= 큐브float8

두 큐브 사이의 체비쇼프(L-inf 미터법) 거리를 계산합니다.


위의 연산자 외에도 다음과 같은 일반적인 비교 연산자가 있습니다.표 9.1유형에 사용 가능큐브. 이 연산자는 먼저 첫 번째 좌표를 비교하고, 같으면 두 번째 좌표를 비교합니다. 주로 b-tree 인덱스 연산자 클래스를 지원하기 위해 존재합니다.큐브, 예를 들어 UNIQUE 제약 조건을 원하는 경우에 유용할 수 있습니다.큐브열. 그렇지 않으면 이 순서는 실용적이지 않습니다.

큐브모듈은 다음을 위한 GiST 인덱스 연산자 클래스도 제공합니다.큐브값. 갑큐브GiST 인덱스는 다음을 사용하여 값을 검색하는 데 사용할 수 있습니다.=, &&, @<@연산자어디절.

또한, a큐브GiST 인덱스는 메트릭 연산자를 사용하여 가장 가까운 이웃을 찾는 데 사용할 수 있습니다.<-, <#<=주문 기준절. 예를 들어, 3차원 점(0.5, 0.5, 0.5)의 가장 가까운 이웃은 다음을 사용하여 효율적으로 찾을 수 있습니다.

테스트에서 c 선택 ORDER BY c <- 큐브(ARRAY[0.5, 0.5, 0.5]) LIMIT 1;

~연산자를 이러한 방식으로 사용하면 선택한 좌표로 정렬된 처음 몇 개의 값을 효율적으로 검색할 수도 있습니다. 예를 들어, 첫 번째 좌표(왼쪽 아래 모서리)를 기준으로 오름차순으로 정렬된 처음 몇 개의 큐브를 얻으려면 다음 쿼리를 사용할 수 있습니다.

테스트에서 c 선택 ORDER BY c ~ 1 LIMIT 5;

그리고 오른쪽 상단 모서리의 첫 번째 좌표가 내림차순으로 정렬된 2D 큐브를 얻으려면:

테스트에서 c 선택 ORDER BY c ~ 3 DESC LIMIT 5;

표 F.3사용 가능한 기능을 보여줍니다.

표 F.3. 큐브 함수

기능

설명

예제

큐브 ( float8 ) → 큐브

두 좌표가 동일한 1차원 큐브를 만듭니다.

큐브(1)(1)

큐브 ( float8, float8 ) → 큐브

1차원 큐브를 만듭니다.

큐브(1, 2)(1),(2)

큐브 ( float8[] ) → 큐브

배열에 의해 정의된 좌표를 사용하여 부피가 0인 큐브를 만듭니다.

큐브(ARRAY[1,2,3])(1, 2, 3)

큐브 ( float8[], float8[] ) → 큐브

두 개의 배열에 의해 정의된 오른쪽 상단과 왼쪽 하단 좌표를 가진 큐브를 만듭니다. 길이는 같아야 합니다.

큐브(ARRAY[1,2], ARRAY[3,4])(1, 2),(3, 4)

큐브 ( 큐브, float8 ) → 큐브

새 좌표의 두 끝점에 대해 동일한 값을 사용하여 기존 큐브에 차원을 추가하여 새 큐브를 만듭니다. 이는 계산된 값을 바탕으로 큐브를 하나씩 만드는 데 유용합니다.

큐브('(1,2),(3,4)'::큐브, 5)(1, 2, 5),(3, 4, 5)

큐브 ( 큐브, float8, float8 ) → 큐브

기존 큐브에 차원을 추가하여 새 큐브를 만듭니다. 이는 계산된 값을 바탕으로 큐브를 하나씩 만드는 데 유용합니다.

큐브('(1,2),(3,4)'::큐브, 5, 6)(1, 2, 5),(3, 4, 6)

cube_dim ( 큐브 ) → 정수

큐브의 차원 수를 반환합니다.

cube_dim('(1,2),(3,4)')2

cube_ll_coord ( 큐브, 정수 ) → float8

반환n-큐브의 왼쪽 하단 모서리에 대한 번째 좌표 값입니다.

cube_ll_coord('(1,2),(3,4)', 2)2

cube_ur_coord ( 큐브, 정수 ) → float8

반환n-큐브의 오른쪽 상단 모서리에 대한 번째 좌표 값입니다.

cube_ur_coord('(1,2),(3,4)', 2)4

cube_is_point ( 큐브 ) → 부울

큐브가 점인 경우, 즉 두 정의 모서리가 동일한 경우 참을 반환합니다.

cube_is_point(큐브(1,1))t

큐브_거리 ( 큐브, 큐브 ) → float8

두 큐브 사이의 거리를 반환합니다. 두 큐브가 모두 점인 경우 이는 일반적인 거리 함수입니다.

큐브_거리('(1,2)', '(3,4)')2.8284271247461903

큐브_하위 집합 ( 큐브, 정수[] ) → 큐브

배열의 차원 인덱스 목록을 사용하여 기존 큐브에서 새 큐브를 만듭니다. 단일 차원의 끝점을 추출하거나 차원을 삭제하거나 원하는 대로 재정렬하는 데 사용할 수 있습니다.

cube_subset(큐브('(1,3,5),(6,7,8)'), ARRAY[2])(3),(7)

cube_subset(큐브('(1,3,5),(6,7,8)'), ARRAY[3,2,1,1])(5, 3, 1, 1),(8, 7, 6, 6)

큐브_유니온 ( 큐브, 큐브 ) → 큐브

두 큐브의 결합을 생성합니다.

cube_union('(1,2)', '(3,4)')(1, 2),(3, 4)

cube_inter ( 큐브, 큐브 ) → 큐브

두 큐브의 교차점을 생성합니다.

cube_inter('(1,2)', '(3,4)')(3, 4),(1, 2)

cube_enlarge ( c 큐브, r 더블, n 정수 ) → 큐브

지정된 반경만큼 큐브의 크기를 증가시킵니다.r적어도n차원. 반지름이 음수이면 큐브가 대신 축소됩니다. 정의된 모든 치수는 반경에 따라 변경됩니다.r. 왼쪽 하단 좌표가 감소합니다.r그리고 오른쪽 상단 좌표는 다음만큼 증가합니다.r. 왼쪽 아래 좌표가 해당 오른쪽 위 좌표보다 크게 증가하는 경우(이는 다음 경우에만 발생할 수 있습니다.r< 0) 두 좌표 모두 평균으로 설정됩니다. 만일n이(가) 정의된 차원 수보다 크고 큐브가 확대되고 있습니다(r 0), 추가 차원이 추가되어 다음을 만듭니다.n모두; 추가 좌표의 초기값은 0을 사용합니다. 이 기능은 가까운 지점을 검색하기 위해 지점 주위에 경계 상자를 만드는 데 유용합니다.

cube_enlarge('(1,2),(3,4)', 0.5, 3)(0.5, 1.5, -0.5),(3.5, 4.5, 0.5)


F.10.4. 기본값#

이 조합:

SELECT Cube_union('(0,5,2),(2,3,1)', '0');
큐브_유니온
------
(0, 0, 0),(2, 5, 2)
(1행)

상식과 모순되지 않으며 교차점도 마찬가지입니다.

SELECT Cube_inter('(0,-1),(1,1)', '(-2),(2)');
큐브_인터
-------------
(0, 0),(1, 0)
(1행)

다른 차원의 큐브에 대한 모든 이진 연산에서 낮은 차원의 큐브는 데카르트 투영으로 가정됩니다. 즉, 즉, 문자열 표현에서 생략된 좌표 자리에 0이 있습니다. 위의 예는 다음과 같습니다.

cube_union('(0,5,2),(2,3,1)','(0,0,0),(0,0,0)');
Cube_inter('(0,-1),(1,1)','(-2,0),(2,0)');

다음 포함 조건자는 포인트 구문을 사용하지만 실제로 두 번째 인수는 내부적으로 상자로 표시됩니다. 이 구문을 사용하면 (box,point) 조건자에 대해 별도의 포인트 유형과 함수를 정의할 필요가 없습니다.

SELECT Cube_contains('(0,0),(1,1)', '0.5,0.5');
큐브_포함
--------------
티
(1행)

F.10.5. 참고#

사용 예는 회귀 테스트를 참조하세요.sql/cube.sql.

사람들이 물건을 부수는 것을 더 어렵게 만들기 위해 큐브의 차원 수는 100으로 제한되어 있습니다. 이것은에서 설정됩니다.cubedata.h더 큰 것이 필요하다면.

F.10.6. 크레딧#

원저자: Gene Selkov, Jr., 아르곤 국립 연구소 수학 및 컴퓨터 공학부.

저는 주로 Joe Hellerstein 교수에게 감사드립니다. (https://dsf.berkeley.edu/jmh/) GiST의 요점을 설명하기 위한 것입니다(http://gist.cs.berkeley.edu/) 및 Illustra에 예시를 제공한 그의 전 학생인 Andy Dong에게도 감사드립니다. 또한 나만의 세계를 만들고 그 안에서 방해받지 않고 살아갈 수 있도록 도와준 현재와 과거의 모든 Postgres 개발자들에게도 감사드립니다. 그리고 수년 동안 내 데이터베이스 연구를 성실하게 지원해 준 Argonne Lab과 미국 에너지부에 감사의 말씀을 전하고 싶습니다.

이 패키지에 대한 사소한 업데이트는 Bruno Wolff III에 의해 이루어졌습니다.2002년 8월/9월. 여기에는 정밀도를 단정밀도에서 배정밀도로 변경하고 몇 가지 새로운 기능을 추가하는 것이 포함됩니다.

Joshua Reich가 추가 업데이트를 했습니다.2006년 7월. 여기에는 다음이 포함됩니다.큐브(float8[], float8[])그리고 더 이상 사용되지 않는 V0 프로토콜 대신 V1 호출 프로토콜을 사용하도록 코드를 정리합니다.