이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : F.37. 스포츠 토토 사이트 - 라인 세그먼트 또는 부동 소수점 간격에 대한 데이터 유형버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

F.31. 사설 토토

이 모듈은 데이터 유형을 구현합니다.세그선 세그먼트 또는 부동 소수점 간격을 나타냅니다.세그불확실함을 나타낼 수 있습니다. 간격 끝점을 나타내는 데 특히 유용합니다. 실험실 측정.

F.31.1. 근거

측정의 기하학은 일반적으로 다음보다 더 복잡합니다. 숫자 연속체의 한 점입니다. 측정값은 다음과 같습니다. 일반적으로 한계가 다소 모호한 연속체의 한 부분입니다. 측정값은 불확실성으로 인해 간격으로 나타납니다. 측정되는 값이 임의성일 수도 있기 때문입니다. 당연히 다음과 같은 일부 조건을 나타내는 간격이 됩니다. 단백질의 안정성 온도 범위.

상식적으로 생각해보면 보관하는 것이 더 편리해 보입니다. 숫자 쌍이 아닌 간격과 같은 데이터입니다. 에서 실제로 대부분의 경우 더 효율적인 것으로 나타났습니다. 응용 프로그램.

더욱 상식적인 측면에서, 한계는 전통적인 숫자 데이터 유형의 사용을 제안합니다. 특정 정보 손실로 이어집니다. 이것을 고려하십시오: 당신의 기기는 6.50을 읽고 이 판독값을 데이터베이스. 가져오면 무엇을 얻나요? 시청:

test= "pH"로 6.50 :: float8을 선택합니다.
 pH
---
6.5
(1행)

측정의 세계에서 6.50은 6.5와 다릅니다. 때로는 결정적으로 다를 수도 있습니다. 실험자들 일반적으로 신뢰하는 숫자를 적어서 게시합니다. 6.50은 실제로는 더 크고 균일한 공간 내에 포함된 퍼지 간격입니다. 퍼지 간격 6.5, 중심점은 다음과 같습니다. (아마도) 그들이 공유하는 유일한 공통 기능입니다. 우리는 확실히 그렇습니다 그렇게 다른 데이터 항목이 동일하게 나타나는 것을 원하지 않습니다.

결론? 할 수 있는 특별한 데이터 유형을 갖는 것이 좋습니다. 임의의 변수가 있는 간격의 한계를 기록합니다. 정밀도. 각 데이터 요소가 기록한다는 의미에서 변수 그 자체의 정확성.

이것을 확인하세요:

test= '6.25 .. 6.50'::사설 토토를 "pH"로 선택합니다.
          pH
------------
6.25 .. 6.50
(1행)

F.31.2. 구문

간격의 외부 표현은 다음을 사용하여 구성됩니다. 범위 연산자로 결합된 하나 또는 두 개의 부동 소수점 숫자 (..또는...). 또는 중심점 + 또는로 지정할 수 있습니다. 편차를 뺀 것입니다. 선택적 확실성 표시기(<, 또는~)도 저장할 수 있습니다. (확실성 그러나 모든 내장 연산자는 표시기를 무시합니다.)표 F-26을 제공합니다 허용된 표현의 개요;표 F-27일부 표시 예.

표 F-26, x, y델타부동소수점 숫자를 나타냅니다.x그리고y하지만 아님델타, 확실성이 앞에 올 수 있음 표시기.

표 F-26.세그외부 표현

x 단일 값(길이가 0인 간격)
x .. y 간격:xy
x (+-) 델타 간격:x - 델타x + 델타
x .. 하한이 있는 열린 간격x
.. x 상한이 있는 열린 간격x

표 F-27. 유효한 예세그입력

5.0 길이가 0인 세그먼트(점, 것입니다)
~5.0 길이가 0인 세그먼트를 생성하고 기록합니다.~데이터에.~다음에 의해 무시됨세그작업이지만 다음과 같이 보존됩니다. 댓글.
<5.0 5.0에 점을 생성합니다.<무시되지만 다음으로 보존됩니다. 댓글.
5.0 5.0에 점을 생성합니다.무시되지만 다음으로 보존됩니다. 댓글.
5(+-)0.3 간격 생성4.7 .. 5.3. 참고하세요(+-)기호가 보존되지 않습니다.
50 .. 50보다 크거나 같은 모든 것
.. 0 0보다 작거나 같은 모든 것
1.5e-2 .. 2E-2 간격 생성0.015 .. 0.02
1 ... 2 다음과 동일1...2또는1 .. 2또는1..2(범위 연산자 주위의 공백 무시됩니다)

왜냐하면...데이터에 널리 사용됩니다. 소스의 대체 철자로 허용됩니다.... 불행히도 이로 인해 구문 분석이 생성됩니다. 모호함: 의 상한이 명확하지 않습니다.0...23이것은 다음과 같습니다23또는0.23. 이것은 소수점 앞에 최소한 한 자릿수를 요구하여 해결됩니다. 의 모든 숫자를 가리킵니다.세그입력합니다.

건강 점검으로,세그거부 하한이 상한보다 큰 구간 예5 .. 2.

F.31.3. 정밀도

세그값은 내부적으로 다음과 같이 저장됩니다. 32비트 부동 소수점 숫자 쌍. 이는 숫자를 의미합니다. 유효 숫자가 7자리를 초과하면 잘립니다.

유효 숫자가 7개 이하인 숫자는 해당 숫자를 유지합니다. 원래 정밀도. 즉, 쿼리가 0.00을 반환하면 뒤에 오는 0이 다음의 인공물이 아닌지 확인합니다. 형식화: 원본 데이터의 정밀도를 반영합니다. 앞에 오는 0의 개수는 정밀도에 영향을 주지 않습니다. 값 0.0067은 단지 2개의 유의미한 값을 갖는 것으로 간주됩니다. 숫자.

F.31.4. 사용법

세그모듈에는 GiST가 포함되어 있습니다. 에 대한 인덱스 연산자 클래스세그값. 는 GiST 연산자 클래스에서 지원하는 연산자는 다음과 같습니다.표 F-28.

표 F-28. 세그먼트 GiST 운영자

운영자 설명
[a, b] << [c, d] [a, b]는 [c, d]의 왼쪽에 완전히 있습니다. 즉, [a, b] << [c, d]는 b < c이고 거짓인 경우 참입니다. 그렇지 않으면.
[a, b] [c, d] [a, b]는 [c, d]의 오른쪽에 완전히 있습니다. 즉, [a, b] [c, d]는 a d이고 거짓인 경우 참입니다. 그렇지 않으면.
[a, b] &< [c, d] 겹치거나 남음 — 이 글을 읽는 것이 더 좋을 것 같습니다 와 같이"오른쪽으로 확장되지 않습니다 ". b <= d일 때 참입니다.
[a, b] & [c, d] 겹침 또는 오른쪽 — 이 글을 읽는 것이 더 좋을 것 같습니다 와 같이"왼쪽으로 확장되지 않습니다. ". a = c일 때 참입니다.
[a, b] = [c, d] 동일함 — 세그먼트 [a, b] 및 [c, d]는 다음과 같습니다. 동일합니다. 즉, a = c이고 b = d입니다.
[a, b] && [c, d] 세그먼트 [a, b]와 [c, d]가 겹칩니다.
[a, b] @ [c, d] 세그먼트 [a, b]에는 세그먼트 [c, d]가 포함되어 있습니다. 즉, a <= c 및 b = d입니다.
[a, b] <@ [c, d] 세그먼트 [a, b]는 [c, d]에 포함되어 있습니다. 즉, a = c 및 b <= d.

(PostgreSQL 8.2 이전에는 격리 연산자@그리고<@였습니다 각각 호출됨@그리고~. 이 이름은 여전히 사용 가능하지만 더 이상 사용되지 않으며 결국 폐기될 예정입니다. 주의할 점은 오래된 이름은 이전 규칙과 반대로 바뀌었습니다. 핵심 기하학적 데이터 유형!)

표준 B-트리 연산자도 제공됩니다. 예

운영자 설명
[a, b] < [c, d] 미만
[a, b] [c, d] 보다 큼
이 연산자는 어떤 경우에도 의미가 없습니다. 실용적인 목적이지만 정렬. 이 연산자는 먼저 비교합니다. (a)와 (c)가 같으면 (b)와 (d)를 비교하십시오. 그 대부분의 경우 합리적으로 좋은 정렬 결과를 얻습니다. 이 유형에 ORDER BY를 사용하려는 경우 유용합니다.

F.31.5. 참고

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

변환 메커니즘(+-)에 일반 범위는 경계의 유효 숫자 수입니다. 예를 들어, 결과가 다음과 같은 경우 하위 경계에 추가 숫자를 추가합니다. 간격에는 10의 거듭제곱이 포함됩니다.

postgres= 세그먼트로 '10(+-)1'::seg를 선택합니다.
      세그먼트
---------
9.0 .. 11 -- 다음과 같아야 합니다: 9 .. 11

R-트리 인덱스의 성능은 크게 다음에 따라 달라질 수 있습니다. 입력 값의 초기 순서. 정렬하는 것이 매우 도움이 될 수 있습니다. 입력 테이블은세그열; 참조 스크립트sort-사설 토토ments.pl에 대한 예.

F.31.6. 크레딧

원저자: Gene Selkov, Jr., Argonne National 수학 및 컴퓨터 공학부 연구실.

저는 주로 Joe Hellerstein 교수에게 감사드립니다 (http://db.cs.berkeley.edu/jmh/)를 설명하기 위해 GiST의 요지 (http://gist.cs.berkeley.edu/). 나도 현재와 과거의 모든 Postgres 개발자에게 감사드립니다. 나만의 세계를 창조하고 방해받지 않고 살아갈 수 있도록 그것. 그리고 Argonne Lab에 감사의 말씀을 전하고 싶습니다. 그리고 수년 동안 충실한 미국 에너지부에 내 데이터베이스 연구를 지원합니다.