사설 토토 유형은 2, 4 및 8 바이트 정수로 구성됩니다. 4 바이트 플로팅 지점 번호 및 선택 가능한--프리렉션 소수점.표 8-2사용 가능한 유형을 나열합니다.
표 8-2. 사설 토토 유형
이름 | 스토리지 크기 | 설명 | 범위 |
---|---|---|---|
smallint | 2 바이트 | 작은 범위 정수 | -32768 ~ +32767 |
정수 | 4 바이트 | 정수를위한 전형적인 선택 | -2147483648 ~ +2147483647 |
bigint | 8 바이트 | 대형 정수 | -9223372036854775808 ~ 922337203685475807 |
10903_10912 | 가변 | 사용자 지정 정밀도, 정확한 | 제한 없음 |
사설 토토 | 변수 | 사용자 지정 정밀도, 정확한 | 제한 없음 |
Real | 4 바이트 | 가변----프리션, meAct | 6 십진 자릿수 정밀 |
이중 정밀 | 8 바이트 | 가변-프리 보도, 미지 | 15 소수 자릿수 정밀 |
Serial | 4 바이트 | AutoinCrementing Integer | 1 ~ 2147483647 |
bigserial | 8 바이트 | 대형 자동화 정수 | 1 ~ 922372036854775807 |
사설 토토 유형에 대한 상수의 구문은에 설명되어 있습니다.섹션 4.1.2. 사설 토토 유형에는 해당 전체 세트가 있습니다 산술 연산자 및 기능. 참조9 장자세한 내용. 그만큼 다음 섹션에서는 유형을 자세히 설명합니다.
유형smallint, Integer및bigint저장 정수, 즉, 분수 구성 요소가없는 사설 토토, 다양한 범위의. 외부에서 값을 저장하려고 시도합니다 허용 범위는 오류가 발생합니다.
유형정수일반적인 선택입니다. 범위, 스토리지 크기 및 성능. 그만큼smallint타입 IS 일반적으로 디스크 공간이 프리미엄 인 경우에만 사용됩니다. 그만큼bigint타입은 인 경우에만 사용해야합니다.정수범위가 충분하지 않기 때문입니다 후자는 확실히 더 빠릅니다.
매우 최소 운영 체제에서bigint유형이 올바르게 작동하지 않을 수 있습니다 8 바이트 정수에 대한 컴파일러 지원에 의존합니다. 그런 기계,bigint동일하게Integer그러나 여전히 8 바이트를 차지합니다 저장. (우리는 이것이 현대적인 플랫폼을 알지 못합니다. 그렇습니다.)
SQL만 지정합니다 정수 유형정수(또는int),smallint및bigint. 유형 이름int2, int4및int8는 확장자이며 일부는 또한 사용됩니다 다른SQL데이터베이스 시스템.
유형사설 토토사설 토토를 저장할 수 있습니다 최대 1000 자리의 정밀도 및 계산을 수행합니다. 정확히. 특히 금전적 저장에 권장됩니다 정확성이 필요한 양 및 기타 수량. 그러나, 산술사설 토토값은입니다 정수 유형 또는 다음 섹션에 설명 된 부동 소수점 유형.
우리는 다음 약관을 사용합니다.스케일of사설 토토is 분수 부분의 십진수 수, 오른쪽 소수점. 그만큼정밀of사설 토토총 수는 유의미합니다 전체 사설 토토의 사설 토토, 즉 사설 토토 수 소수점의 양쪽. 따라서 사설 토토 23.5141에는 a가 있습니다 6의 정밀도와 4 개의 스케일. 정수를 고려할 수 있습니다. 스케일이 0입니다.
최대 정밀도와 최대 스케일사설 토토열을 구성 할 수 있습니다. 에게 유형의 열 선언사설 토토사용하십시오 통사론:
사설 토토 (정밀, 스케일)
정밀도는 양수 여야합니다. 또는 :
사설 토토 (정밀)
0의 스케일을 선택합니다. 지정 :
사설 토토
정밀도 또는 스케일이없는 열을 만듭니다. 정밀도와 스케일의 사설 토토 값은 최대까지 저장할 수 있습니다. 정밀도에 대한 구현 한도. 이런 종류의 열 입력 값을 특정 척도로 강요하지는 않지만사설 토토선언 된 스케일의 열 입력 값을 해당 척도로 강요합니다. (그만큼SQL표준은 기본 스케일 0이 필요합니다. 즉, 정수 정밀도에 대한 강요. 우리는 이것을 조금 찾습니다 쓸모 없는. 이식성이 걱정된다면 항상 지정하십시오 정밀도와 규모는 명시 적으로.)
저장 될 값의 척도가 열의 선언 된 스케일, 시스템은 값을 반올림합니다. 지정된 수의 분수 사설 토토로. 그렇다면 소수점의 왼쪽 사설 토토 수는 선언 된 정밀도 마이너스 선언 된 스케일은 오류입니다 높은.
사설 토토 값은 추가없이 물리적으로 저장됩니다 주도권 또는 후행. 따라서 선언 된 정밀도와 열의 척도는 고정 할당이 아닌 최대입니다. (이것에서 감각사설 토토유형은 더 비슷합니다varchar (n)보다char (n).) 실제 스토리지 요구 사항은 4 개의 각 그룹에 대해 2 바이트입니다. 10 진수 사설 토토, 5-8 바이트 오버 헤드.
일반 사설 토토 값 외에도사설 토토유형은 특별한 값을 허용Nan, 의미"Not-Number". 모든 작업NAN다른 생산량NAN. 이 값을 SQL 명령에서 상수로 쓸 때 예를 들어 그 주위에 인용문을 넣어야합니다업데이트 테이블 세트 x = 'nan'. 입력에, 문자열Nana 사례에 민감한 방식.
참고 :대부분의 구현에서"Not-Number"개념,NAN는 다른 것과 동등한 것으로 간주되지 않습니다 사설 토토 값 (포함Nan). ~ 안에 허용 명령사설 토토가치 트리 기반 인덱스에서 정렬 및 사용PostgreSQL취급NAN모든 것보다 동일하고 값 비NAN값.
유형Decimaland사설 토토동등합니다. 두 유형 모두의 일부입니다.SQL표준.
데이터 유형Realand이중 정밀가변적이며 가변적입니다 사설 토토 유형. 실제로 이러한 유형은 일반적으로입니다 구현IEEE바이너리 플로팅 포인트 산술 용 표준 754 (단일 및 이중 정밀도) 기본 프로세서, 운영 체제 및 컴파일러 지원 그것.
eencect는 일부 값을 정확하게 변환 할 수 없음을 의미합니다 내부 형식으로, 근사치로 저장됩니다. 그 값을 저장하고 검색하는 것은 약간 나타날 수 있습니다 불일치. 이러한 오류 및 전파 방법 관리 계산을 통해 전체 지점의 주제입니다. 수학 및 컴퓨터 과학은 논의되지 않을 것입니다 다음 사항을 제외하고 여기에서는 다음과 같습니다.
정확한 저장 및 계산이 필요한 경우 (예 : 금전 금액의 경우 사용하십시오.사설 토토대신 입력.
이들로 복잡한 계산을하고 싶다면 특히 의존하는 경우 중요한 모든 것을위한 유형 경계 사례의 특정 행동 (무한대, 언더 플로), 구현을 신중하게 평가해야합니다.
평등에 대한 두 가지 부동 소수점 값 비교 항상 예상대로 작동하지는 않습니다.
대부분의 플랫폼에서Real유형은 a 최소 1e-37 ~ 1e+37의 범위 6 개 이상의 정밀도 십진수. 그만큼이중 정밀타입 일반적으로 약 1e-307 ~ 1e+308의 범위는 다음과 같습니다. 최소 15 자리의 정밀도. 너무 큰 값 또는 너무 작 으면 오류가 발생합니다. 반올림이 발생할 수 있습니다 입력 번호의 정밀도가 너무 높습니다. 너무 가까운 사설 토토 제로와는 별개로 표현할 수없는 ZERO 언더 플로 오류를 유발합니다.
참고 :theextra_float_digits설정은 추가 유의 한 사설 토토의 수를 제어합니다 부동 소수점 값이 텍스트로 변환 될 때 포함 출력. 기본값0, 출력은 모든 플랫폼에서 동일합니다 PostgreSQL에 의해 지원됩니다. 증가하면 출력이 생성됩니다 그것은 저장된 값을 더 정확하게 나타내지 만 5 월 무관심하십시오.
일반 사설 토토 값 외에도 부동 소수점 유형에는 몇 가지 특별한 값이 있습니다.
Infinity
-infinity
NAN
참고 :IEEE754를 지정합니다NAN다른 사람과 비교해서는 안됩니다 부동 소수점 값 (포함NAN). 부동 소수점을 허용하기 위해 트리 기반 인덱스에서 정렬 및 사용되는 값,PostgreSQL취급NAN값은 동일하고 더 큽니다 모든 비보다NAN값.
PostgreSQL도 지원합니다 SQL 표준 표기법floatandfloat (P)부정확 한 사설 토토 유형을 지정합니다. 여기,P허용 가능한 최소를 지정합니다 정밀BINAGE사설 토토.PostgreSQLAcceptsfloat (1)tofloat (24)선택대로Real타입float (25)tofloat (53)select더블 정도. 의 값P허용 범위 외부에서 오류를 그립니다.float정밀도가 지정되지 않은 상태에서 평균으로 간주됩니다이중 정밀.
참고 :이전PostgreSQL7.4, 정밀도float (P)너무 많은 것을 의미하는 것으로 간주되었습니다소수점사설 토토. 이것은 SQL 표준과 일치하도록 수정되었습니다. 정밀도는 이진 사설 토토로 측정됨을 지정합니다.Realand이중 정밀정확히 24와 Mantissa의 53 비트가 각각 정확합니다 IEEE 표준 부동 소수점 구현. 비 예시에 플랫폼은 약간 벗어날 수 있지만 단순화를 위해 동일한 범위의P사용됩니다 모든 플랫폼에서.
데이터 유형Serialandbigserial는 진정한 유형이 아니라 단지 a 고유 식별자 열을 생성하기위한 표기법 편의성 (와 유사auto_increment다른 데이터베이스에서 지원하는 속성). 현재에서 구현, 지정 :
테이블 생성TableName(Colname시리얼 );
지정과 동일합니다.
시퀀스 만들기TableName_Colname_Seq; 테이블 작성TableName(ColnameInteger null default nextVal ( 'TableName_Colname_seq ') ); Alter SequenceTableName_Colname_Seq 소유TableName.Colname;
따라서 우리는 정수 열을 만들고 그 열을 준비했습니다. 시퀀스 생성기에서 할당 할 기본값. 에이NOT NULL제약 조건이 적용됩니다 널 값을 삽입 할 수 없는지 확인하십시오. (대부분의 경우 당신 또한 A를 첨부하고 싶을 것입니다.고유 한또는기본 키방지 할 제약 우연히 삽입되는 값 중복 값이지만 자동적이지 않습니다.) 마지막으로, 시퀀스는로 표시됩니다."소유자"열이 있으므로 열이나 테이블이 떨어지면 떨어졌습니다.
참고 :이전PostgreSQL 7.3, Serial암시고유 한. 이것은 더 이상 자동이 아닙니다. 직렬 열을 원한다면 고유 한 제약이 있거나 기본 키가 되십시오. 이제 다른 데이터 유형과 마찬가지로 지정됩니다.
시퀀스의 다음 값을 삽입하려면Serial열,를 지정하십시오Serial열에 기본값을 할당해야합니다. 이것은 목록에서 열을 제외하여 수행 할 수 있습니다. 의 열삽입성명서, 또는 사용을 통해기본키 단어.
유형 이름Serial및Serial4동등합니다 : 둘 다 CreateInteger열. 유형 이름bigserialandSerial8작업 그들이 a를 만드는 것을 제외하고는 같은 방식으로bigint열.bigserial231테이블의 수명에 걸친 식별자.
a를 위해 생성 된 시퀀스Serial소유 열이있을 때 열이 자동으로 삭제됩니다 떨어졌다. 열을 떨어 뜨리지 않고 시퀀스를 떨어 뜨릴 수 있습니다. 그러나 이것은 열 기본값을 제거 할 것입니다 표현.