PostgreSQL풍부한 세트가 있습니다 사용자가 사용할 수있는 기본 데이터 토토. 사용자는 새로운 토토을 추가 할 수 있습니다PostgreSQL사용토토 생성명령.
표 5-1모든 것을 보여줍니다 표준 분포에 포함 된 범용 데이터 토토. 대부분의 대체 이름은"aliases"열은 내부적으로 사용하는 이름입니다PostgreSQL역사적 이유. 또한 일부 내부적으로 사용되거나 더 이상 사용되지 않은 토토 사용할 수 있지만 여기에 나열되어 있지 않습니다.
표 5-1. 데이터 토토
토토 이름 | 별칭 | 설명 |
---|---|---|
bigint | int8 | 서명 8 바이트 정수 |
bigserial | Serial8 | 자동화 8 바이트 정수 |
비트 | 고정 길이 비트 문자열 | |
비트 값 (n) | varbit (n) | 가변 길이 비트 문자열 |
부울 | bool | Logical Boolean (true/false) |
Box | 2D 평면의 직사각형 상자 | |
BYTEA | 이진 데이터 | |
캐릭터 변동 (n) | varchar (n) | 가변 길이 문자열 |
캐릭터 (n) | char (n) | 고정 길이 문자열 |
CIDR | IP 네트워크 주소 | |
Circle | 2D 평면의 원 | |
날짜 | 달력 날짜 (연도, 월, 일) | |
이중 정밀도 | float8 | 이중 정밀 부동 소수점 번호 |
inet | IP 호스트 주소 | |
Integer | int, int4 | 서명 4 바이트 정수 |
interval (P) | 일반 사용 시간 범위 | |
line | 2D 평면의 무한 선 (구현되지 않음) | |
LSEG | 2D 평면의 라인 세그먼트 | |
MacAddr | Mac 주소 | |
Money | 통화 금액 | |
숫자 [(P, S)] | 십진 [(P, S)] | 정밀도를 선택할 수있는 정확한 숫자 |
PATH | 2D 평면에서 열리고 닫힌 기하학적 경로 | |
포인트 | 2D 평면의 기하학적 지점 | |
Polygon | 2D 평면에서 닫힌 기하학적 경로 | |
Real | float4 | 단일 정밀 부동 소수점 번호 |
smallint | int2 | 2 바이트 정수에 서명 |
Serial | Serial4 | 4 바이트 정수를 자동화하는 |
텍스트 | 가변 길이 문자열 | |
시간 [(P)] [시간대가없는 ] | 시간의 시간 | |
시간 [(P)] with Time Zone | Timetz | 시간대를 포함한 시간 |
타임 스탬프 [(P)] 시간대없이 | 타임 스탬프 | 날짜와 시간 |
타임 스탬프 [(P)] [시간대와 함께] | Timestamptz | 시간대를 포함한 날짜와 시간 |
호환성 :다음 토토 (또는 철자 그)는에 의해 지정됩니다.SQL: 비트, 비트 다양한, 부울, char, 캐릭터 다양한, 캐릭터, Varchar, 날짜, 더블 정도, Integer, 간격, 숫자, Decimal, Real, smallint, Time, 타임 스탬프(시간이 있거나없는 시간 존).
각 데이터 토토에는 외부 표현이 있습니다 입력 및 출력 기능. 많은 내장 토토이 있습니다 명백한 외부 형식. 그러나 몇 가지 토토도 있습니다 독특한PostgreSQL: 개방 및 폐쇄 경로, 또는 형식에 대한 몇 가지 가능성이 있습니다. 날짜 및 시간 토토과 같은. 대부분의 입력 및 출력 기본 토토에 해당하는 함수 (예 : 정수 및 부동 소수점 숫자) 약간의 오류 확인을 수행합니다. 입력의 일부 출력 함수는 뒤집을 수 없습니다. 즉, 결과입니다 출력 함수는 원래 입력.
일부 연산자 및 기능 (예 : 추가 및 곱셈)에서 런타임 오류 확인을 수행하지 않습니다 실행 속도 향상의 관심사. 일부 시스템에서 예를 들어, 일부 데이터 토토의 숫자 연산자는 조용히 언더 플로 또는 오버플로.
숫자 토토은 2, 4 및 8 바이트로 구성됩니다 정수, 4 바이트 및 8 바이트 부동 소수점 번호 및 고정----------절약 소수점.표 5-2사용 가능한 토토.
표 5-2. 숫자 토토
토토 이름 | 스토리지 크기 | 설명 | 범위 |
---|---|---|---|
smallint | 2 바이트 | 작은 범위 고정-정밀성 | -32768 ~ +32767 |
Integer | 4 바이트 | 고정-정밀성에 대한 일반적인 선택 | -2147483648 ~ +2147483647 |
bigint | 8 바이트 | 광범위한 고정-정밀도 | -9223372036854775808 ~ 922337203685475807 |
소수점 | 가변 | 사용자 지정 정밀도, 정확한 | 제한 없음 |
숫자 | 변수 | 사용자 지정 정밀도, 정확한 | 제한 없음 |
Real | 4 바이트 | 가변-프레임, eencact | 6 십진 자릿수 정밀 |
이중 정밀 | 8 바이트 | 가변-프리션, 부정 행위 | 15 소수점 자릿수 정밀 |
Serial | 4 바이트 | AutoinCrementing Integer | 1 ~ 2147483647 |
bigserial | 8 바이트 | 대형 자동화 정수 | 1 ~ 9223372036854775807 |
숫자 토토에 대한 상수의 구문이 설명되어 있습니다. 안에섹션 1.1.2. 숫자 토토에는 해당 전체 세트가 있습니다 산술 연산자 및 기능. 참조6 장자세한 내용. 그만큼 다음 섹션에서는 토토을 자세히 설명합니다.
토토smallint, Integer, bigint전체를 저장하십시오 숫자, 즉, 분수 구성 요소가없는 숫자 다양한 범위. 외부에서 값을 저장하려고 시도합니다 허용 범위는 오류가 발생합니다.
토토Integer평소입니다 범위, 스토리지간에 최상의 균형을 제공하는 선택 크기와 성능. 그만큼smallint토토은 일반적으로 디스크 공간이 프리미엄 인 경우에만 사용됩니다. 그만큼bigint토토은 다음과 같은 경우에만 사용해야합니다 그만큼Integer범위는 충분하지 않습니다. 후자는 확실히 더 빠르기 때문에.
thebigint토토이 작동하지 않을 수 있습니다 컴파일러에 의존하기 때문에 모든 플랫폼에서 올바르게 8 바이트 정수에 대한 지원. 그런 기계에 지원하다,bigint동일하게Integer(그러나 여전히 8 바이트를 차지합니다 스토리지). 그러나 우리는 합리적인 것을 알지 못합니다 이것이 사실 인 플랫폼.
SQL만 지정합니다 정수 토토Integer(또는int) 및smallint. 토토bigint및 토토 이름int2, int4및int8와 공유되는 확장자입니다 다양한 기타SQL데이터베이스 시스템.
참고 :토토 열이있는 경우smallint또는bigint색인, 시스템을 얻는 데 문제가 발생할 수 있습니다 그 지수를 사용합니다. 예를 들어, 양식의 조항
... 여기서 smallint_column = 42시스템이 토토을 할당하기 때문에 색인을 사용하지 않습니다Integer상수 42로,PostgreSQL현재 두 가지 다른 데이터 토토이있는 경우 인덱스를 사용할 수 없습니다. 관련된. 해결 방법은 상수를 단일 쿼트하는 것입니다. 따라서:
... 여기서 smallint_column = '42'시스템이 토토 해상도를 지연시킵니다 올바른 토토을 상수에 할당합니다.
토토숫자숫자를 저장할 수 있습니다 최대 1,000 자리의 정밀도 및 계산을 수행 정확히. 특히 금전적 저장에 권장됩니다 정확성이 필요한 양 및 기타 수량. 그러나숫자타입은 매우 느립니다 다음에 설명 된 부동 소수점 토토과 비교합니다 부분.
다음에서 우리는이 용어를 사용합니다.스케일of숫자is 분수 부분의 소수점 숫자 수는 소수점의 오른쪽. 그만큼정밀of숫자전체 숫자의 총 숫자는 총 수입니다. 즉, 소수점의 양쪽에 숫자의 수 가리키다. 그래서 23.5141 숫자는 정밀도가 6이고 스케일입니다. 4. 정수는 0의 스케일을 갖는 것으로 간주 될 수 있습니다.
숫자 토토의 정밀도와 스케일은 모두 캔 구성하십시오. 토토의 열을 선언하려면숫자구문 사용
숫자 (정밀, 스케일)
정밀도는 양수 여야합니다 긍정적인. 또는
숫자 (정밀)
0의 스케일을 선택합니다. 지정
숫자
정밀도 또는 스케일없이 열이 생성됩니다. 정밀도와 스케일의 숫자 값은 저장 될 수 있습니다. 정밀도의 구현 한도로. 이것의 열 종류는 특정 척도로 입력 값을 강요하지 않습니다. 반면숫자선언 된 열 스케일은 입력 값을 해당 스케일로 강요합니다. (그만큼SQL표준 요구 사항 a 기본 스케일 0, 즉 정수 정밀도 강요. 우리 이것을 조금 쓸모 없다는 것을 찾으십시오. 당신이 걱정한다면 이식성은 항상 정밀도와 스케일을 지정합니다 명시 적으로.)
값의 정밀도 또는 스케일이 열의 정밀 또는 스케일을 선언하면 시스템은 가치를 반올림하려고합니다. 값을 반올림 할 수없는 경우 선언 된 한계를 충족시키기 위해 오류가 제기됩니다.
토토Decimaland숫자동등합니다. 두 토토 모두의 일부입니다 그만큼SQL표준.
데이터 토토Realand이중 정밀부적절하고 가변적입니다 숫자 토토. 실제로 이러한 토토은 일반적으로입니다 구현IEEE이진 플로팅 포인트 산술 용 표준 754 (단일 및 이중 정밀도) 기본 프로세서, 운영 체제 및 컴파일러 지원 그것.
부당 함은 일부 값을 정확하게 변환 할 수 없음을 의미합니다 내부 형식으로, 근사치로 저장됩니다. 값을 저장하고 인쇄하는 것은 약간의 불일치. 이러한 오류 및 전파 방법 관리 계산을 통해 전체 지점의 주제입니다. 수학 및 컴퓨터 과학은 논의되지 않을 것입니다 또한 다음 사항을 제외하고는 다음과 같습니다.
정확한 저장 및 계산이 필요한 경우 (예 : 금전 금액의 경우 사용하십시오.숫자대신 입력.
이들로 복잡한 계산을하고 싶다면 특히 의존하는 경우 중요한 모든 것을위한 토토 경계 사례의 특정 행동 (무한대, 언더 플로), 구현을 신중하게 평가해야합니다.
평등에 대한 두 개의 부동 소수점 값 비교 5 월 또는 예상대로 작동하지 않을 수 있습니다.
일반적으로Real토토에는 범위가 있습니다 최소 6의 정밀도로 -1e+37 ~+1e+37 이상 십진수. 그만큼이중 정밀도일반적으로 토토은 약 -1e+308 ~+1e+308의 범위를 가지고 있습니다. 최소 15 자리의 정밀도. 너무 큰 값 또는 너무 작 으면 오류가 발생합니다. 반올림이 발생할 수 있습니다 입력 번호의 정밀도가 너무 높습니다. 숫자가 너무 가깝습니다 0으로 표현할 수없는 0으로 0 언더 플로 오류를 유발합니다.
theSerial데이터 토토은 사실이 아닙니다 토토이지만 단지 설정을위한 표기법 편의성 일뿐입니다 식별자 열 (유사auto_increment일부가 지원하는 속성 다른 데이터베이스). 현재 구현에서 지정
테이블 생성TableName(Colname시리얼 );
지정과 동일합니다.
시퀀스 만들기TableName_Colname_Seq; 테이블 작성TableName(ColnameInteger Default NextVal ( 'TableName_Colname_seq ') null );
따라서 우리는 정수 열을 만들어 시퀀스 생성기에서 할당 할 기본값. 에이NOT NULL제약 조건이 적용됩니다 널 값을 명시 적으로 삽입 할 수 없는지 확인하십시오. 어느 하나. 대부분의 경우 A 첨부를 원할 것입니다.고유 한또는기본 키복제를 방지하기위한 제약 조건 우연히 삽입 된 값이지만 이것은 아닙니다. 오토매틱.
aSerial열을 삽입 할 열 시퀀스의 다음 값은 테이블에를 지정합니다.Serial열을 할당해야합니다 기본값. 이것은 제외 할 수 있습니다 의 열 목록에서 열삽입진술 또는 사용을 통한기본값키워드.
토토 이름SerialandSerial4동등합니다 : 둘 다 Create정수열. 토토 이름bigserial및Serial8작업 그들이 a를 만드는 것을 제외하고 똑같은 방식으로bigint열.bigserial231수명에 걸친 식별자 테이블.
a에 의해 생성 된 시퀀스Serial소유 열이있을 때 토토이 자동으로 삭제됩니다
삭제하고 다른 방법으로 떨어질 수 없습니다. (이것은 사실이 아니었다
안에PostgreSQL릴리스
7.3 이전. 이 자동 드롭 링키지는 그렇지 않습니다
덤프를 다시로드하여 생성 된 시퀀스에 대해 발생합니다.
7.3 이전 데이터베이스; 덤프 파일에는 포함되지 않습니다
의존성 링크를 설정하는 데 필요한 정보.)
또한, 시퀀스와 열 사이의 이러한 의존성은 다음과 같습니다
에만 제작 된Serial열 자체;
다른 열이 시퀀스를 참조하는 경우 (아마도
수동으로 전화NextVal ()
)
기능), 시퀀스가 제거되면 파손될 수 있습니다.
사용Serial패션의 열입니다
나쁜 형태로 간주됩니다.
참고 :이전PostgreSQL 7.3, Serial암시고유 한. 이것은 더 이상 자동이 아닙니다. 만약에 당신은 일련 열이되기를 바랍니다고유 한또는 A기본 열쇠이제 다른 것과 마찬가지로 지정해야합니다. 데이터 토토.