Postgresql 9.2.24 문서 | ||||
---|---|---|---|---|
윈 토토 : 문서 : 9.2 : PG_TRGM | up | 부록 F. 추가 제공된 모듈 | 배트맨 토토 PostgreSQL : 문서 : 9.2 : Sepgsql |
이 모듈은 데이터 유형을 구현합니다사설 토토라인 세그먼트 또는 부동 소수점 간격을 나타냅니다.사설 토토간격 엔드 포인트이므로 표현하는 데 특히 유용합니다 실험실 측정.
측정의 형상은 일반적으로보다 더 복잡합니다 숫자 연속체의 한 지점. 측정은입니다 일반적으로 다소 퍼지 한계가있는 해당 연속체의 세그먼트. 측정은 불확실성으로 인해 간격으로 나옵니다 측정되는 값이 당연히 단백질의 안정성의 온도 범위.
상식 만 사용하면 저장하는 것이 더 편리합니다. 숫자 쌍보다는 간격과 같은 데이터. ~ 안에 연습, 심지어 대부분의 경우 더 효율적입니다 응용 프로그램.
상식의 선을 따라 한계는 기존 숫자 데이터 유형의 사용을 제안합니다. 특정 정보 손실로 이어집니다. 이것을 고려하십시오 : 당신의 악기는 6.50을 읽고이 판독 값을 입력합니다. 데이터 베이스. 당신이 그것을 가져올 때 당신은 무엇을 얻습니까? 보다:
test = select 6.50 :: float8 as "ph"; ph --- 6.5 (1 행)
측정 세계에서 6.50은 6.5와 다릅니다. 때로는 비판적으로 다를 수 있습니다. 실험자 일반적으로 그들이 신뢰하는 숫자를 기록하고 게시합니다. 6.50입니다 실제로 더 크고 심지어는 퍼지 간격 퍼지어 간격은 6.5로 중심 지점이 있습니다 (아마도) 그들이 공유하는 유일한 공통 기능. 우리는 확실히합니다 그러한 다른 데이터 항목이 동일하게 나타나기를 원하지 않습니다.
결론? 할 수있는 특수 데이터 유형을 갖는 것이 좋습니다. 임의로 변수로 간격의 한계를 기록하십시오 정도. 각 데이터 요소가 녹음한다는 의미에서 변수 고유 한 정밀도.
확인 :
test = 선택 '6.25 .. 6.50':: 사설 토토 as "ph"; ph ------------ 6.25 .. 6.50 (1 행)
간격의 외부 표현은 사용하여 형성됩니다 범위 운영자가 결합 한 1 ~ 2 개의 부동 소수점 번호 (..또는...). 또는 중심점 플러스 또는 편차를 빼고. 선택적 확실성 지표 (<, 또는~)도 저장할 수 있습니다. (확실성 그러나 모든 내장 운영자가 표시기를 무시합니다.)표 F-26허용 된 표현의 개요;표 F-27일부를 보여줍니다 예제.
in표 F-26, x, y및델타부동 소수점 번호 표시.xandy하지만델타, 확실성이있을 수 있습니다 지시자.
표 F-26.사설 토토외부 표현
x | 단일 값 (제로 길이 간격) |
x .. y | 간격xtoy |
x(+-)델타 | 간격x - 델타tox+델타 |
x .. | 하한이있는 개방 간격x |
.. x | 상한이있는 개방 간격x |
표 F-27. 유효한 예사설 토토입력
5.0 | 제로 길이 세그먼트를 만듭니다 (Point, Point 할 것이다) |
~ 5.0 | 제로 길이 세그먼트 및 레코드 생성~데이터에서.~에 의해 무시됩니다사설 토토운영이지만 a로 보존됩니다 논평. |
<5.0 | 5.0에 포인트를 만듭니다.<무시되지만 a로 보존됩니다 논평. |
5.0 | 5.0에서 지점을 만듭니다.무시되지만 a로 보존됩니다 논평. |
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...2323또는0.23. 이것은 소수점 전에 최소한 하나의 숫자를 요구하여 해결 의 모든 숫자를 가리 킵니다.사설 토토입력.
정신 점검으로사설 토토거부 하한이 상단보다 큰 간격, 예5 .. 2.
사설 토토값은 내부적으로 저장됩니다 32 비트 플로팅 포인트 번호 쌍. 이것은 그 숫자를 의미합니다 7 개 이상의 중요한 숫자는 잘릴 것입니다.
7 이하의 중요한 숫자를 가진 숫자는 유지합니다 원래 정밀도. 즉, 쿼리가 0.00을 반환하는 경우, 귀하는 귀하입니다 후행 제로가 유물이 아님을 확신 할 것입니다 형식 : 원래 데이터의 정밀도를 반영합니다. 주요 0의 수는 정밀도에 영향을 미치지 않습니다. 값 0.0067은 단지 2 가지 중요한 것으로 간주됩니다 숫자.
the사설 토토모듈에는 요점이 포함되어 있습니다 에 대한 색인 연산자 클래스사설 토토값. 그만큼 GIST 연산자 클래스에서 지원하는 연산자가에 표시됩니다.표 F-28.
표 F-28. Seg Gist 운영자
운영자 | 설명 |
---|---|
[a, b] << [c, 디] | [a, b]는 전적으로 [c, d]의 왼쪽에 있습니다. 즉, [a, b] << [c, d]는 b <c이고 false 인 경우 사실입니다. 그렇지 않으면. |
[a, b] [c, 디] | [a, b]는 전적으로 [c, d]의 오른쪽에 있습니다. 즉, [a, b] [c, d]는 a d와 false 인 경우 참입니다. 그렇지 않으면. |
[a, b] & <[c, 디] | 겹치거나 남은 것 - 이것은 더 잘 읽을 수 있습니다. 처럼"는 오른쪽으로 확장되지 않습니다 의". b <= d.가 사실입니다. |
[a, b] & [c, 디] | 겹치거나 옳습니다 - 이것은 더 잘 읽을 수 있습니다. 처럼"왼쪽으로 확장되지 않습니다 의". a = c.가 사실입니다. |
[a, b] = [c, d] | 동일 - 세그먼트 [a, b] 및 [c, d]는 동일합니다. 즉, a = c 및 b = d. |
[a, b] && [c, 디] | 세그먼트 [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. |
@and<@각각 호출@and~. 이 이름은 여전히 사용 가능하지만 그렇습니다 감가 상각되고 결국 은퇴 할 것이다. 노인을 주목하십시오 이름은 이전에 컨벤션에서 반전 된 후 핵심 기하학적 데이터 유형!)
표준 B- 트리 연산자도 제공됩니다 예
이 연산자는 어떤 의미가 없습니다. 실제적인 목적이지만 정렬. 이 연산자들은 먼저 비교합니다 (a) ~ (c), 이들이 같으면 (b)와 (d)를 비교하십시오. 저것 대부분의 경우 합리적으로 좋은 정렬을합니다. 이 유형으로 주문을 사용하려면 유용합니다.사용의 예는 회귀 테스트를 참조하십시오SQL/사설 토토.SQL.
변환하는 메커니즘(+-)to 일반 범위는 결정에 완전히 정확하지 않습니다 경계에 대한 중요한 숫자 수. 예를 들어, 결과적으로 하한에 추가 숫자를 추가합니다. 간격에는 10의 힘이 포함됩니다 :
postgres = select '10 (+-) 1 ':: seg as seg; 세그 ------- 9.0 .. 11-해야 할 것 : 9 .. 11
R- 트리 지수의 성능은 크게 의존 할 수 있습니다. 입력 값의 초기 순서. 정렬하는 것이 매우 도움이 될 수 있습니다 의 입력 테이블사설 토토열; 보다 스크립트Sort-사설 토토ments.pl예.
원래 저자 : Gene Selkov, Jr.<selkovjr@mcs.anl.gov
,
Argonne National의 수학 및 컴퓨터 과학 부서
실혐실.
주로 Joe Hellerstein 교수에게 감사드립니다 (http : //db.cs.berkeley.edu/jmh/) 설명을위한 요지의 요지 (http : //gist.cs.berkeley.edu/). 나도 해요 현재와 과거에 모든 Postgres 개발자에게 감사합니다 내 자신의 세상을 만들고 방해받지 않은 살 수 있습니다. 그것. Argonne Lab에 대한 감사를 인정하고 싶습니다. 그리고 수년간의 충실한 미국 에너지 부에 내 데이터베이스 연구 지원.