롤 토토 유형은 일부 요소 유형의 값 롤 토토를 나타내는 데이터 유형입니다 (롤 토토라고 함)하위 유형). 예를 들어, 롤 토토타임 스탬프
회의실이 예약되어있는 시간의 롤 토토를 나타내는 데 사용될 수 있습니다. 이 경우 데이터 유형은입니다.tsrange
(짧은“타임 스탬프 범위”) 및타임 스탬프
하위 유형입니다. 하위 유형은 요소 값이 값 범위 내에 있는지 또는 그 후에 요소 값이 잘 정의되도록 총 순서를 가져야합니다.
롤 토토 유형은 단일 롤 토토 값의 많은 요소 값을 나타내고 겹치는 롤 토토와 같은 개념을 명확하게 표현할 수 있기 때문에 유용합니다. 예약 목적으로 시간과 날짜 롤 토토를 사용하는 것이 가장 분명한 예입니다.
모든 롤 토토 유형에는 해당 멀티 랜지 유형이 있습니다. 멀티 랜지는 논쟁의 여지가없고 비어 있지 않은 비 널 롤 토토의 주문 목록입니다.
PostgreSQL은 다음과 같은 내장 롤 토토 유형과 함께 제공됩니다.
int4Range
- 롤 토토Integer
, int4multirange
- 해당 멀티 랜지
int8Range
- 롤 토토bigint
, int8multirange
- 해당 멀티 랜지
NumRange
- 롤 토토숫자
, Nummultirange
- 해당 멀티 랜지
tsrange
- 롤 토토시간대가없는 타임 스탬프
, tsmultirange
- 해당 멀티 랜지
TSTZRANGE
- 롤 토토시간대가있는 타임 스탬프
, tstzmultirange
- 해당 멀티 랜지
Daterange
- 롤 토토날짜
, datemultirange
- 해당 멀티 랜지
또한 자신의 롤 토토 유형을 정의 할 수 있습니다. 보다유형 만들기자세한 내용은
모든 비어 있지 않은 롤 토토에는 하한과 상한의 두 롤 토토가 있습니다. 이 값 사이의 모든 지점은 롤 토토에 포함됩니다.
롤 토토의 텍스트 형식에서 포괄적 인 하한은“[
”독점적 인 하한은를 표현하는 반면“(
”. 마찬가지로 포괄적 인 상한은로 표시됩니다.“]
”, 독점적 인 상한은에 표시됩니다.“)
”. (보다섹션 8.17.5자세한 내용은)
함수lower_inc
및어퍼_inc
롤 토토 값의 하부 및 상한의 포괄 성을 테스트합니다.
롤 토토의 하한을 생략 할 수 있습니다. 즉, 상한보다 적은 값이 롤 토토에 포함되어 있음을 의미합니다.(, 3]
. 마찬가지로, 롤 토토의 상한이 생략되면 하한보다 큰 모든 값이 롤 토토에 포함됩니다.[,]
(,)
. 이러한 결 측값을 +/- 인피니티로 생각할 수는 있지만 특수 롤 토토 유형 값이며 모든 롤 토토 요소 유형의 +/- 인피니티 값으로 간주됩니다..
개념이있는 요소 유형“Infinity”명시 적 바운드 값으로 사용할 수 있습니다. 예를 들어 타임 스탬프 범위가있는[오늘, 인피니티)
스페셜 제외타임 스탬프
valueInfinity
while[오늘, 인피니티]
포함하여[오늘,)
및[오늘,]
.
함수lower_inf
및어퍼 _inf
롤 토토의 무한 하부 및 상한을 테스트합니다.
범위 값에 대한 입력은 다음 패턴 중 하나를 따라야합니다.
(하위 바운드
,상한
)하위 바운드
,상한
]하위 바운드
,상한
)하위 바운드
,상한
]
괄호 또는 괄호는 앞에서 설명한 바와 같이 하부 및 상한이 배타적인지 또는 포괄적인지를 나타냅니다. 최종 패턴은빈
는 빈 롤 토토 (포인트가없는 롤 토토)를 나타냅니다.
하위 바운드
하위 유형에 대한 유효한 입력 인 문자열이거나 하한을 나타내지 않도록 비어있을 수 있습니다. 비슷하게,상한
하위 유형에 대한 유효한 입력 인 문자열이거나 상한을 나타내지 않기 위해 비어있을 수 있습니다.
각 바운드 값을 사용하여 인용 할 수 있습니다"
(이중 인용) 문자. 바운드 값에 괄호 안, 괄호, 쉼표, 이중 인용문 또는 백 슬래시가 포함 된 경우에 필요합니다. 왜냐하면이 문자는 롤 토토 구문의 일부로 간주되기 때문입니다.""
, 아무것도 쓰지 않기 때문에 무한한 경계를 의미합니다.
범위 값 전후에 공백이 허용되지만 괄호 나 브래킷 사이의 모든 공백은 하부 또는 상한 값의 일부로 간주됩니다. (요소 유형에 따라 중요하거나 중요하지 않을 수도 있습니다.)
이 규칙은 복합 유형 리터럴에서 필드 값을 작성하는 것과 매우 유사합니다. 보다섹션 8.16.6추가 논평은
예 :
- 3 포함, 7은 포함되지 않으며 그 사이의 모든 지점을 포함합니다.
멀티 랜지의 입력은 곱슬 브래킷입니다 ({
및}
) 쉼표로 분리 된 0 이상의 유효 롤 토토를 포함합니다. 뇌물과 쉼표 주변에는 흰색이 허용됩니다.
예 :
선택 '':: int4multirange;
각 범위 유형에는 범위 유형과 동일한 이름의 생성자 기능이 있습니다. 생성자 함수를 사용하는 것은 범위 문자가 상수를 작성하는 것보다 종종 더 편리합니다. 왜냐하면 경계 값의 추가 인용이 필요하지 않기 때문입니다.“()
”, “(]
”, “[)
”또는“[]
”. 예를 들어:
- 전체 형식은 : 하한, 상한 및 텍스트 인수를 나타냅니다.
각 범위 유형에는 멀티 랜지 유형과 동일한 이름의 멀티 랜지 생성자가 있습니다. 생성자 함수는 적절한 유형의 범위 인 0 이상의 인수를 취합니다.
NumMultirange ()를 선택하십시오.
개별 롤 토토는 요소 유형이 잘 정의 된 것입니다“Step”:Integer
또는날짜
. 이러한 유형에서는 두 가지 요소가 인접 해 있다고 말할 수 있습니다.숫자
유형은 롤 토토와 마찬가지로 연속적입니다타임 스탬프
. (일지라도타임 스탬프
정밀도가 제한되어 있으며 이론적으로 개별로 취급 될 수 있으므로 단계 크기가 일반적으로 관심이 없기 때문에 연속적으로 간주하는 것이 좋습니다.)
개별 롤 토토 유형에 대해 생각하는 또 다른 방법은 A에 대한 명확한 아이디어가 있다는 것입니다“다음”또는“이전”각 요소 값에 대한 값. 이를 알면 원래 주어진 것 대신 다음 또는 이전 요소 값을 선택함으로써 범위 범위의 포용 적 표현과 독점적 표현을 변환 할 수 있습니다.[4,8]
및(3,9)
동일한 값 세트를 나타냅니다. 그러나 이것은 숫자 이상의 범위에 적합하지 않을 것입니다.
개별 롤 토토 유형에 a가 있어야합니다.Canonicalization요소 유형의 원하는 단계 크기를 알고있는 함수. 정식화 함수는 범위 유형의 등가 값을 동일한 표현, 특히 일관되게 포용 적 또는 독점적 인 경계를 갖도록 변환하는 것으로 청구됩니다.
내장 롤 토토 유형int4Range
, int8Range
및Daterange
모두 하한을 포함하고 상한을 제외하는 표준 형태를 사용합니다. 즉,[)
. 그러나 사용자 정의 롤 토토 유형은 다른 규칙을 사용할 수 있습니다.
사용자는 자신의 범위 유형을 정의 할 수 있습니다. 이를 수행하는 가장 일반적인 이유는 내장 롤 토토 유형에 제공되지 않은 하위 유형에 대한 범위를 사용하기 때문입니다.float8
:
롤 토토로 FloatRange 유형 생성 (
왜냐하면float8
의미가 없음“Step”, 우리는이 예에서 표준화 함수를 정의하지 않습니다.
자신의 롤 토토를 정의 할 때 자동으로 해당 멀티 레인지 유형을 얻습니다.
자신의 범위 유형을 정의하면 다른 하위 유형 B-Tree 연산자 클래스 또는 Collation을 지정하여 주어진 범위에 속하는 값을 결정하는 정렬 순서를 변경할 수 있습니다..
하위 유형이 연속 값이 아닌 이산을 갖는 것으로 간주되면유형 만들기
명령을 지정해야합니다표준
함수. 정식화 함수는 입력 범위 값을 취하며 다른 범위와 형식을 가질 수있는 동등한 범위 값을 반환해야합니다.[1, 7]
및[1, 8)
는 동일해야합니다. 형식이 다른 두 개의 동등한 값이 항상 동일한 형식으로 동일한 값에 매핑되는 한 어떤 표현을 정식으로 선택하는지는 중요하지 않습니다.타임 스탬프
1 시간의 단계 크기를 가질 수있는 것으로 정의 될 수 있습니다.이 경우 표준화 함수는 한 시간이되지 않은 경계를 마무리하거나 오류를 대신 대신 오류를 던져야합니다..
또한 GIST 또는 SP-GIST 인덱스와 함께 사용되는 모든 범위 유형은 하위 유형 차이 또는를 정의해야합니다.subtype_diff
, 함수. (색인은 여전히 작동하지 않습니다subtype_diff
, 그러나 차이 함수가 제공되는 경우보다 상당히 덜 효율적일 수 있습니다.) 하위 유형 차이 함수는 하위 유형의 두 입력 값을 취하고 차이를 반환합니다 (예 :.X
마이너스Y
)으로 표시float8
값. 위의 예에서는 함수float8mi
정기의 기초float8
마이너스 작업자를 사용할 수 있습니다. 그러나 다른 하위 유형의 경우 일부 유형 변환이 필요합니다.subtype_diff
함수는 선택한 연산자 클래스 및 Collation이 암시하는 정렬 순서와 일치해야합니다. 즉, 첫 번째 인수가 정렬 순서에 따라 두 번째 인수보다 클 때마다 결과가 긍정적이어야합니다.
덜 단순화되지 않은 예제subtype_diff
함수는 :
함수 생성 time_subtype_diff (x time, y time)는 float8을 반환합니다
참조유형 만들기롤 토토 유형 생성에 대한 자세한 정보.
롤 토토 유형의 테이블 열에 대해 GIST 및 SP-GIST 인덱스를 만들 수 있습니다. 멀티 랜지 유형의 테이블 열에 대해서도 GIST 인덱스를 만들 수도 있습니다.
GIST를 사용하여 예약에서 인덱스 예약 _IDX 생성;
범위의 요점 또는 SP-Gist 인덱스는 이러한 범위 연산자와 관련된 쿼리를 가속화 할 수 있습니다.=
, &&
, <@
, @>
, <<
, ,
-|-
, &<
및&
. 멀티 랜지의 GIST 지수는 동일한 멀티 랜지 연산자와 관련된 쿼리를 가속화 할 수 있습니다.&&
, <@
, @>
, <<
, ,
-|-
, &<
및&
. 보다표 9.56자세한 내용은
또한 롤 토토 유형의 테이블 열에 대해 B- 트리 및 해시 인덱스를 만들 수 있습니다. 이러한 인덱스 유형의 경우 기본적으로 유용한 롤 토토 작업은 평등입니다.<
및운영자이지만 주문은 임의적이며 일반적으로 실제 세계에서 유용하지 않습니다. Range Type 'B-Tree 및 Hash 지원은 주로 실제 인덱스 생성보다는 내부적으로 정렬 및 해싱을 허용하기위한 것입니다.
while고유 한
는 스칼라 값에 대한 자연스러운 제약 조건이며, 일반적으로 범위 유형에 부적합합니다. 대신, 제외 제약 조건이 종종 더 적합합니다 (참조테이블 작성 ... 제약 ... 제외). 제외 제약 조건은와 같은 제약 조건의 사양을 허용합니다.“비 겹치기”범위 유형에서. 예를 들어:
테이블 예약 생성 (
그 제약 조건은 동시에 테이블에 존재하는 겹치는 값을 방지합니다 :
예약 값에 삽입하십시오
당신은를 사용할 수 있습니다btree_gist
일반 스칼라 데이터 유형에 대한 제외 제약 조건을 정의하기위한 확장 및 최대 유연성을 위해 롤 토토 제외와 결합 할 수 있습니다. 예를 들어, 이후btree_gist
가 설치되어 있습니다. 다음 제약 조건은 회의실 번호가 동일 한 경우에만 중첩 범위를 거부합니다.
확장 생성 btree_gist;
올바른 문서에 아무것도 표시되면 일치하지 않습니다.이 양식문서 문제를보고하려면