롤 토토 유형은 2바이트, 4바이트, 8바이트 정수, 4바이트 및 8바이트 부동 소수점 롤 토토, 선택 가능한 정밀도 소수로 구성됩니다.표 8.2사용 가능한 유형을 나열합니다.
표 8.2. 롤 토토 유형
| 이름 | 저장소 크기 | 설명 | 범위 |
|---|---|---|---|
smallint |
2바이트 | 작은 범위의 정수 | -32768 ~ +32767 |
정수 |
4바이트 | 정수에 대한 일반적인 선택 | -2147483648 ~ +2147483647 |
bigint |
8바이트 | 대규모 정수 | -9223372036854775808 ~ +9223372036854775807 |
십진수 |
변수 | 사용자 지정 정밀도, 정확함 | 소수점 이하 최대 131072자리; 소수점 이하 16383자리까지 |
롤 토토 |
변수 | 사용자 지정 정밀도, 정확함 | 소수점 이하 최대 131072자리; 소수점 이하 16383자리까지 |
진짜 |
4바이트 | 가변-정밀도, 부정확 | 십진수 6자리 정밀도 |
배정밀도 |
8바이트 | 가변-정밀도, 부정확 | 십진수 15자리 정밀도 |
smallserial |
2바이트 | 작은 자동 증가 정수 | 1 ~ 32767 |
연재 |
4바이트 | 자동 증가하는 정수 | 1 ~ 2147483647 |
큰 직렬 |
8바이트 | 큰 자동 증가 정수 | 1 ~ 9223372036854775807 |
롤 토토 유형에 대한 상수 구문은 다음에 설명되어 있습니다.섹션 4.1.2. 롤 토토 유형에는 해당 산술 연산자 및 함수의 전체 세트가 있습니다. 참조PostgreSQL : 문서 : 14 : 9 장. 토토 커뮤니티 및 연산자13629_13706
유형작은int, 정수및비긴트정수, 즉 분수 구성요소가 없는 다양한 범위의 롤 토토를 저장합니다. 허용된 범위를 벗어난 값을 저장하려고 하면 오류가 발생합니다.
유형정수범위, 저장소 크기 및 성능 간의 최상의 균형을 제공하므로 일반적인 선택입니다.작은int유형은 일반적으로 디스크 공간이 부족한 경우에만 사용됩니다.비긴트유형은 다음과 같은 경우에 사용하도록 설계되었습니다.정수유형이 부족합니다.
SQL정수 유형만 지정정수(또는int), 작은int및bigint. 유형 이름int2, int4및int8다른 확장 프로그램에서도 사용되는 확장 프로그램입니다SQL데이터베이스 시스템.
유형롤 토토매우 많은 자릿수의 롤 토토를 저장할 수 있습니다. 특히 화폐 금액 및 정확성이 요구되는 기타 수량을 저장하는 데 권장됩니다. 로 계산롤 토토값은 가능한 경우 정확한 결과(예: 덧셈, 뺄셈, 곱셈)를 산출합니다. 그러나 계산은롤 토토값은 정수 유형이나 다음 섹션에 설명된 부동 소수점 유형에 비해 매우 느립니다.
우리는 아래에서 다음 용어를 사용합니다:정밀도의롤 토토는 정수 중 유효 자릿수의 총 개수, 즉 소수점 양쪽 자리의 자릿수입니다.규모의롤 토토은 소수점 오른쪽의 소수 부분의 소수 자릿수입니다. 따라서 롤 토토 23.5141의 정밀도는 6이고 소수 자릿수는 4입니다. 정수는 소수 자릿수가 0인 것으로 간주될 수 있습니다.
a의 최대 정밀도와 최대 규모 모두롤 토토열을 구성할 수 있습니다. 유형의 열을 선언하려면롤 토토다음 구문을 사용하세요:
롤 토토(정밀도,규모)
정밀도는 양수여야 하며, 척도는 0 또는 양수여야 합니다. 또는:
롤 토토(정밀도)
척도 0을 선택합니다. 지정:
롤 토토
정밀도나 배율이 없으면 다음을 생성합니다.“제한되지 않은 롤 토토”구현 한계까지 모든 길이의 롤 토토 값을 저장할 수 있는 열입니다. 이런 종류의 열은 입력 값을 특정 규모로 강제하지 않지만,롤 토토선언된 규모가 있는 열은 입력 값을 해당 규모로 강제 변환합니다. (그SQL표준에는 기본 소수 자릿수 0이 필요합니다. 즉, 정수 정밀도로 강제 변환됩니다. 우리는 이것이 약간 쓸모없다고 생각합니다. 이식성이 염려된다면 항상 정밀도와 배율을 명시적으로 지정하세요.)
a에서 명시적으로 지정할 수 있는 최대 정밀도롤 토토유형 선언은 1000입니다. 제약 없음롤 토토열에는 다음에 설명된 제한이 적용됩니다.표 8.2.
저장할 값의 스케일이 선언된 열의 스케일보다 큰 경우 시스템은 값을 지정된 소수 자릿수로 반올림합니다. 그런 다음 소수점 왼쪽의 자릿수가 선언된 정밀도에서 선언된 소수점을 뺀 값을 초과하면 오류가 발생합니다.
롤 토토 값은 추가 선행 또는 후행 0 없이 물리적으로 저장됩니다. 따라서 선언된 열의 전체 자릿수와 크기는 고정된 할당이 아니라 최대값입니다. (이런 의미에서롤 토토유형이 다음과 더 유사함varchar(보다n)문자(.) 실제 저장 요구 사항은 4자리 소수 그룹당 2바이트에 3~8바이트 오버헤드를 더한 것입니다.n)
일반 롤 토토 값 외에도롤 토토유형에는 몇 가지 특별한 값이 있습니다:
인피니티
-무한대
NaN
이것은 IEEE 754 표준에서 채택되었으며 다음을 나타냅니다.“무한대”, “음의 무한대”및“롤 토토가 아님”입니다. SQL 명령에서 이러한 값을 상수로 작성할 때는 앞뒤에 따옴표를 붙여야 합니다. 예를 들면 다음과 같습니다.UPDATE 테이블 SET x = '-무한대'. 입력 시 이러한 문자열은 대소문자를 구분하지 않고 인식됩니다. 무한대 값의 철자를 다르게 지정할 수도 있습니다.inf그리고-inf.
무한대 값은 수학적 기대에 따라 작동합니다. 예를 들어,무한대+ 임의의 유한값은 같음무한대그렇죠무한대플러스무한대; 하지만무한대마이너스무한대수율NaN(롤 토토 아님), 잘 정의된 해석이 없기 때문입니다. 무한대는 제한되지 않은 형태로만 저장될 수 있습니다.롤 토토열, 개념적으로 유한 정밀도 한계를 초과하기 때문입니다.
그NaN(롤 토토 아님) 값은 정의되지 않은 계산 결과를 나타내는 데 사용됩니다. 일반적으로 a를 사용한 모든 작업은NaN입력하면 다른 결과가 나옵니다NaN. 유일한 예외는 작업의 다른 입력이 다음과 같은 경우 동일한 출력을 얻을 수 있는 경우입니다.NaN유한 또는 무한 롤 토토 값으로 대체되었습니다. 그런 다음 해당 출력 값은 다음 용도로 사용됩니다.NaN도요. (이 원칙의 예는 다음과 같습니다.NaN0의 거듭제곱으로 올리면 1이 됩니다.)
대부분의 구현에서“롤 토토가 아님”개념,NaN다른 롤 토토 값(포함)과 동일한 것으로 간주되지 않습니다.NaN). 허용하기 위해롤 토토트리 기반 색인에서 정렬 및 사용되는 값PostgreSQL대접NaN값은 동일하고 모든 비-보다 큽니다.NaN값.
유형십진수그리고롤 토토동등합니다. 두 유형 모두 다음의 일부입니다.SQL표준.
값을 반올림할 때,롤 토토type은 0에서 멀어지는 방향으로 반올림하지만 (대부분의 시스템에서)진짜그리고배정밀도가장 가까운 짝수에 반올림 관계를 입력합니다. 예를 들면:
선택 x, round(x::numeric) AS num_round, round(x::배정밀도) AS dbl_round generate_series(-3.5, 3.5, 1)에서 x; 엑스 | 라운드 수 | dbl_round ------+------------+----------- -3.5 | -4 | -4 -2.5 | -3 | -2 -1.5 | -2 | -2 -0.5 | -1 | -0 0.5 | 1 | 0 1.5 | 2 | 2 2.5 | 3 | 2 3.5 | 4 | 4 (8행)
데이터 유형진짜그리고배정밀도은 부정확하고 가변 정밀도 롤 토토 유형입니다. 현재 지원되는 모든 플랫폼에서 이러한 유형은 다음을 구현합니다.IEEE기본 프로세서, 운영 체제 및 컴파일러가 지원하는 범위 내에서 이진 부동 소수점 산술(각각 단정밀도 및 배정밀도)에 대한 표준 754입니다.
부정확이란 일부 값이 내부 형식으로 정확하게 변환될 수 없으며 근사치로 저장되므로 값을 저장하고 검색할 때 약간의 불일치가 나타날 수 있음을 의미합니다. 이러한 오류를 관리하고 계산을 통해 오류가 전파되는 방법은 수학과 컴퓨터 과학 전체 분야의 주제이므로 다음 사항을 제외하고 여기에서는 논의하지 않습니다.
정확한 저장 및 계산(금전 금액 등)이 필요한 경우 다음을 사용하세요.롤 토토대신 입력하세요.
중요한 사항에 대해 이러한 유형을 사용하여 복잡한 계산을 수행하려는 경우, 특히 경계 사례(무한대, 언더플로)의 특정 동작에 의존하는 경우 구현을 신중하게 평가해야 합니다.
두 개의 부동 소수점 값이 동일한지 비교하는 것이 항상 예상대로 작동하지 않을 수도 있습니다.
현재 지원되는 모든 플랫폼에서,진짜유형의 범위는 약 1E-37 ~ 1E+37이며 정밀도는 최소 6자리 소수입니다. 그만큼배정밀도유형의 범위는 약 1E-307에서 1E+308이며 정밀도는 최소 15자리입니다. 값이 너무 크거나 작으면 오류가 발생합니다. 입력 롤 토토의 정밀도가 너무 높으면 반올림이 발생할 수 있습니다. 0과 구별되는 것으로 표현할 수 없는 0에 너무 가까운 롤 토토는 언더플로 오류를 발생시킵니다.
기본적으로 부동 소수점 값은 가장 짧고 정확한 십진수 표현으로 텍스트 형식으로 출력됩니다. 생성된 10진수 값은 동일한 이진 정밀도로 표현할 수 있는 다른 값보다 실제로 저장된 이진 값에 더 가깝습니다. (단, 출력값은 현재 절대 아닙니다.정확히입력 루틴이 가장 가까운 짝수로 반올림 규칙을 제대로 준수하지 않는 광범위한 버그를 피하기 위해 표현 가능한 두 값 사이의 중간입니다.) 이 값은 최대 17개의 유효 십진수를 사용합니다.float8값, 최대 9자리float4값.
이 가장 짧고 정확한 출력 형식은 과거 반올림 형식보다 생성 속도가 훨씬 빠릅니다.
이전 버전에서 생성된 출력과의 호환성을 위해PostgreSQL, 그리고 출력 정밀도를 줄일 수 있도록extra_float_digits27264_27414플로트4) 또는 15(forfloat8) 유효 십진수. 음수 값을 설정하면 자릿수가 더 줄어듭니다. 예를 들어 -2는 출력을 각각 4자리 또는 13자리로 반올림합니다.
모든 값extra_float_digits0보다 크면 가장 짧고 정확한 형식이 선택됩니다.
정확한 값을 원하는 응용 프로그램은 역사적으로 설정해야 했습니다.extra_float_digits3번으로 가서 획득하세요. 버전 간 호환성을 최대화하려면 계속 그렇게 해야 합니다.
일반 롤 토토 값 외에도 부동 소수점 유형에는 몇 가지 특수 값이 있습니다.
무한대
-무한대
NaN
이것은 IEEE 754 특수 값을 나타냅니다.“무한대”, “음의 무한대”그리고“롤 토토가 아님”입니다. SQL 명령에서 이러한 값을 상수로 작성할 때는 앞뒤에 따옴표를 붙여야 합니다. 예를 들면 다음과 같습니다.UPDATE 테이블 SET x = '-무한대'. 입력 시 이러한 문자열은 대소문자를 구분하지 않고 인식됩니다. 무한대 값의 철자를 다르게 지정할 수도 있습니다.inf그리고-inf.
IEEE 754는 다음을 명시합니다NaN다른 부동 소수점 값(포함과 동일하게 비교해서는 안 됩니다.NaN). 부동 소수점 값을 트리 기반 인덱스에서 정렬하고 사용할 수 있도록 하려면,PostgreSQL대접NaN값은 동일하고 모든 비-보다 큽니다.NaN값.
PostgreSQL또한 SQL 표준 표기법을 지원합니다플로트그리고부동(부정확한 롤 토토 유형을 지정하기 위한 것입니다. 여기,p)p최소 허용 정밀도를 지정합니다.바이너리롤 토토.PostgreSQL수락플로트(1)에플로트(24)다음 선택으로진짜입력, 동안플로트(25)에플로트(53)선택배정밀도. 의 값p허용된 범위를 벗어나면 오류가 발생합니다.플로트정밀도가 지정되지 않은 것은 다음을 의미합니다배정밀도.
이 섹션에서는 자동 증가 열을 생성하는 PostgreSQL 특정 방법을 설명합니다. 또 다른 방법은 다음에 설명된 SQL 표준 ID 열 기능을 사용하는 것입니다.테이블 생성.
데이터 유형smallserial, 연재그리고큰 직렬은 실제 유형이 아니지만 단지 고유 식별자 열을 생성하기 위한 표기 편의일 뿐입니다(AUTO_INCREMENT다른 데이터베이스에서 지원되는 속성). 현재 구현에서는 다음을 지정합니다.
테이블 생성테이블 이름(열이름연속 );
다음을 지정하는 것과 동일합니다.
시퀀스 생성테이블 이름_열이름_seq AS 정수; 테이블 만들기테이블 이름(열이름정수가 NULL이 아님 DEFAULT nextval('테이블 이름_열이름_seq') ); 시퀀스 변경테이블 이름_열이름_seq 소유자테이블 이름.열이름;
따라서 우리는 정수 열을 생성하고 그 기본값이 시퀀스 생성기에서 할당되도록 준비했습니다. 갑NULL이 아님null 값을 삽입할 수 없도록 제약 조건이 적용됩니다. (대부분의 경우 다음을 첨부하고 싶을 수도 있습니다.고유또는기본 키중복 값이 실수로 삽입되는 것을 방지하기 위한 제약이지만 자동은 아닙니다.) 마지막으로 시퀀스는 다음과 같이 표시됩니다.“소유자”열, 즉 열이나 테이블이 삭제되면 삭제됩니다.
왜냐하면smallserial, 연재그리고큰 직렬은 시퀀스를 사용하여 구현되므로 행이 삭제되지 않더라도 열에 나타나는 값 시퀀스에 "구멍"이나 공백이 있을 수 있습니다. 시퀀스에서 할당된 값은 해당 값을 포함하는 행이 테이블 열에 성공적으로 삽입되지 않은 경우에도 여전히 "사용"됩니다. 예를 들어 삽입 트랜잭션이 롤백되는 경우 이런 일이 발생할 수 있습니다. 참조다음값()에PostgreSQL : 문서 : 14 : 9.17. 스포츠 토토 조작 기능자세한 내용은.
순서의 다음 값을 다음에 삽입하려면연재열, 다음을 지정하십시오.연재열에는 기본값이 할당되어야 합니다. 이는의 열 목록에서 해당 열을 제외하여 수행할 수 있습니다.삽입문장 또는를 사용하여기본값키워드.
유형 이름연재그리고연재4동등함: 둘 다 생성정수열. 유형 이름큰 직렬그리고연속8같은 방식으로 작업합니다. 단, 다음을 생성합니다.비긴트열.큰 직렬2개 이상의 사용이 예상되는 경우 사용해야 합니다.31테이블 수명 동안 식별자. 유형 이름smallserial그리고연속2또한 동일한 방식으로 작동합니다. 단, 다음을 생성합니다.smallint열.
다음을 위해 생성된 시퀀스연재소유 열이 삭제되면 열도 자동으로 삭제됩니다. 열을 삭제하지 않고 시퀀스를 삭제할 수 있지만 이렇게 하면 열 기본 표현식이 강제로 제거됩니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.