이 모듈은 데이터 유형을 구현합니다.큐브다차원 큐브를 표현하기 위한 것입니다.
이 모듈은 고려됩니다.“신뢰할 수 있는”, 즉, 슈퍼유저가 아닌 사용자가 설치할 수 있습니다.만들기현재 데이터베이스에 대한 권한입니다.
표 F.1에 대한 유효한 외부 표현을 보여줍니다.큐브유형.x, y등은 부동 소수점 숫자를 나타냅니다.
표 F.1. 큐브 외부 표현
| 외부 구문 | 의미 |
|---|---|
|
1토토 점(또는 길이가 0인 1토토 간격) |
( |
위와 동일 |
|
n차원 공간의 한 점, 내부적으로 부피가 0인 큐브로 표현됨 |
( |
위와 동일 |
( |
다음에서 시작하는 1차원 간격x다음으로 끝남y또는 그 반대로; 순서는 중요하지 않습니다. |
[( |
위와 동일 |
( |
대각선으로 반대쪽 모서리 쌍으로 표현되는 n차원 큐브 |
[( |
위와 동일 |
큐브의 반대쪽 모서리가 어떤 순서로 입력되는지는 중요하지 않습니다.큐브유니폼을 생성하는 데 필요한 경우 함수가 자동으로 값을 교환합니다.“왼쪽 하단 — 오른쪽 상단”내부 표현. 모서리가 일치하면,큐브다음과 함께 한 모서리만 저장합니다.“점입니다”공간 낭비를 방지하기 위한 플래그입니다.
공백은 입력 시 무시되므로[(다음과 같습니다x),(y)][ ( .x ), ( y ) ]
값은 내부적으로 64비트 부동 소수점 숫자로 저장됩니다. 즉, 유효 숫자가 약 16자리를 초과하면 잘립니다.
표 F.2유형에 대해 제공된 특수 연산자를 표시큐브.
표 F.2. 큐브 연산자
|
운영자 설명 |
|---|
|
큐브가 겹치나요? |
|
첫 번째 큐브에 두 번째 큐브가 포함되어 있습니까? |
|
첫 번째 큐브가 두 번째 큐브에 포함되어 있습니까? |
|
추출 |
|
추출 |
|
두 큐브 사이의 유클리드 거리를 계산합니다. |
|
두 큐브 사이의 택시(L-1 미터법) 거리를 계산합니다. |
|
두 큐브 사이의 체비쇼프(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. 큐브 함수
|
기능 설명 예제 |
|---|
|
두 좌표가 동일한 1차원 큐브를 만듭니다.
|
|
1차원 큐브를 만듭니다.
|
|
배열에 의해 정의된 좌표를 사용하여 부피가 0인 큐브를 만듭니다.
|
|
두 개의 배열에 의해 정의된 오른쪽 상단과 왼쪽 하단 좌표를 가진 큐브를 만듭니다. 길이는 같아야 합니다.
|
|
새 좌표의 두 끝점에 대해 동일한 값을 사용하여 기존 큐브에 차원을 추가하여 새 큐브를 만듭니다. 이는 계산된 값을 바탕으로 큐브를 하나씩 만드는 데 유용합니다.
|
|
기존 큐브에 차원을 추가하여 새 큐브를 만듭니다. 이는 계산된 값을 바탕으로 큐브를 하나씩 만드는 데 유용합니다.
|
|
큐브의 차원 수를 반환합니다.
|
|
반환
|
|
반환
|
|
큐브가 점인 경우, 즉 두 정의 모서리가 동일한 경우 참을 반환합니다.
|
|
두 큐브 사이의 거리를 반환합니다. 두 큐브가 모두 점인 경우 이는 일반적인 거리 함수입니다.
|
|
배열의 차원 인덱스 목록을 사용하여 기존 큐브에서 새 큐브를 만듭니다. 단일 차원의 끝점을 추출하거나 차원을 삭제하거나 원하는 대로 재정렬하는 데 사용할 수 있습니다.
|
|
두 큐브의 결합을 생성합니다.
|
|
두 큐브의 교차점을 생성합니다.
|
|
지정된 반경만큼 큐브의 크기를 증가시킵니다.
|
이 조합:
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행)
사용 예는 회귀 테스트를 참조하세요.sql/cube.sql.
사람들이 물건을 부수는 것을 더 어렵게 만들기 위해 큐브의 차원 수는 100으로 제한되어 있습니다. 이것은에서 설정됩니다.cubedata.h더 큰 것이 필요하다면.
원저자: Gene Selkov, Jr.<selkovjr@mcs.anl.gov, 아르곤 국립 연구소 수학 및 컴퓨터 공학부.
저는 주로 Joe Hellerstein 교수에게 감사드립니다. (https://dsf.berkeley.edu/jmh/) GiST의 요점을 설명하기 위한 것입니다(http://gist.cs.berkeley.edu/) 및 Illustra에 예시를 제공한 그의 전 학생인 Andy Dong에게도 감사드립니다. 또한 나만의 세계를 만들고 그 안에서 방해받지 않고 살아갈 수 있도록 도와준 현재와 과거의 모든 Postgres 개발자들에게도 감사드립니다. 그리고 수년 동안 내 데이터베이스 연구를 성실하게 지원해 준 Argonne Lab과 미국 에너지부에 감사의 말씀을 전하고 싶습니다.
이 패키지에 대한 사소한 업데이트는 Bruno Wolff III에 의해 이루어졌습니다.<bruno@wolff.to2002년 8월/9월. 여기에는 정밀도를 단정밀도에서 배정밀도로 변경하고 몇 가지 새로운 기능을 추가하는 것이 포함됩니다.
Joshua Reich가 추가 업데이트를 했습니다.<josh@root.net2006년 7월. 여기에는 다음이 포함됩니다.큐브(float8[], float8[])그리고 더 이상 사용되지 않는 V0 프로토콜 대신 V1 호출 프로토콜을 사용하도록 코드를 정리합니다.