PostgreSQL-데이터 유형
이 장에서는 PostgreSQL에서 사용되는 데이터 유형에 대해 설명합니다. 테이블을 생성하는 동안 각 열에 대해 데이터 유형, 즉 테이블 필드에 저장할 데이터의 종류를 지정합니다.
이것은 몇 가지 이점을 가능하게합니다-
Consistency − 동일한 데이터 유형의 열에 대한 작업은 일관된 결과를 제공하며 일반적으로 가장 빠릅니다.
Validation − 데이터 유형의 적절한 사용은 데이터 형식 유효성 검사 및 데이터 유형 범위를 벗어난 데이터 거부를 의미합니다.
Compactness − 열은 단일 유형의 값을 저장할 수 있으므로 간결하게 저장됩니다.
Performance− 데이터 유형의 적절한 사용은 가장 효율적인 데이터 저장을 제공합니다. 저장된 값을 빠르게 처리 할 수 있으므로 성능이 향상됩니다.
PostgreSQL은 다양한 데이터 유형 세트를 지원합니다. 또한 사용자는 CREATE TYPE SQL 명령을 사용하여 자신의 사용자 지정 데이터 유형을 만들 수 있습니다 . PostgreSQL에는 다양한 범주의 데이터 유형이 있습니다. 아래에서 설명합니다.
숫자 유형
숫자 유형은 2 바이트, 4 바이트 및 8 바이트 정수, 4 바이트 및 8 바이트 부동 소수점 숫자, 선택 가능한 정밀도 10 진수로 구성됩니다. 다음 표에는 사용 가능한 유형이 나열되어 있습니다.
이름 | 저장 크기 | 기술 | 범위 |
---|---|---|---|
smallint | 2 바이트 | 작은 범위의 정수 | -32768에서 +32767 |
정수 | 4 바이트 | 정수에 대한 일반적인 선택 | -2147483648에서 +2147483647 |
Bigint | 8 바이트 | 큰 범위의 정수 | -9223372036854775808 ~ 9223372036854775807 |
소수 | 변하기 쉬운 | 사용자 지정 정밀도, 정확한 | 소수점 앞 최대 131072 자리; 소수점 뒤 최대 16383 자리 |
숫자 | 변하기 쉬운 | 사용자 지정 정밀도, 정확한 | 소수점 앞 최대 131072 자리; 소수점 뒤 최대 16383 자리 |
레알 | 4 바이트 | 가변 정밀도, 부정확 | 6 자리 소수점 정밀도 |
배정 밀도 | 8 바이트 | 가변 정밀도, 부정확 | 십진수 15 자리 정밀도 |
작은 | 2 바이트 | 작은 자동 증가 정수 | 1에서 32767 |
연속물 | 4 바이트 | 자동 증가 정수 | 1에서 2147483647 |
bigserial | 8 바이트 | 큰 자동 증가 정수 | 1에서 9223372036854775807 |
화폐 유형
돈 유형은 고정 소수점 정밀도로 통화 금액을 저장합니다. numeric, int 및 bigint 데이터 유형의 값은 money 로 캐스트 될 수 있습니다 . 반올림 오류가 발생할 가능성이 있으므로 돈을 처리하는 데 부동 소수점 숫자를 사용하지 않는 것이 좋습니다.
이름 | 저장 크기 | 기술 | 범위 |
---|---|---|---|
돈 | 8 바이트 | 통화 금액 | -92233720368547758.08에서 +92233720368547758.07 |
문자 유형
아래 표에는 PostgreSQL에서 사용할 수있는 범용 문자 유형이 나열되어 있습니다.
S. 아니. | 이름 및 설명 |
---|---|
1 | character varying(n), varchar(n) 제한이있는 가변 길이 |
2 | character(n), char(n) 고정 길이, 공백 채우기 |
삼 | text 가변 길이 무제한 |
이진 데이터 유형
BYTEA의 데이터 형식은 아래의 표에서 이진 스트링의 저장을 허용한다.
이름 | 저장 크기 | 기술 |
---|---|---|
bytea | 1 또는 4 바이트와 실제 2 진 문자열 | 가변 길이 이진 문자열 |
날짜 / 시간 유형
PostgreSQL은 아래 표에 표시된 것처럼 전체 SQL 날짜 및 시간 유형 집합을 지원합니다. 날짜는 그레고리력에 따라 계산됩니다. 여기에서 모든 유형의 해상도는1 microsecond / 14 digits 외 date 유형, 그 해상도는 day.
이름 | 저장 크기 | 기술 | 낮은 가치 | 높은 가치 |
---|---|---|---|---|
타임 스탬프 [(p)] [시간대 없음] | 8 바이트 | 날짜와 시간 모두 (시간대 없음) | 기원전 4713 년 | 294276 AD |
TIMESTAMPTZ | 8 바이트 | 시간대가있는 날짜와 시간 모두 | 기원전 4713 년 | 294276 AD |
데이트 | 4 바이트 | 날짜 (시간 없음) | 기원전 4713 년 | 5874897 AD |
시간 [(p)] [시간대 제외] | 8 바이트 | 시간 (날짜 없음) | 00:00:00 | 24:00:00 |
시간대 포함 시간 [(p)] | 12 바이트 | 시간대 만 포함 | 00 : 00 : 00 + 1459 | 24 : 00 : 00-1459 |
간격 [필드] [(p)] | 12 바이트 | 시간 간격 | -178000000 년 | 178000000 년 |
부울 유형
PostgreSQL은 표준 SQL 유형 부울을 제공합니다. 부울 데이터 유형은 true , false 상태 및 SQL 널 값으로 표시되는 세 번째 상태 인 unknown을 가질 수 있습니다.
이름 | 저장 크기 | 기술 |
---|---|---|
부울 | 1 바이트 | 참 또는 거짓 상태 |
열거 형
열거 형 (열거 형) 유형은 순서가 지정된 정적 값 집합을 구성하는 데이터 유형입니다. 여러 프로그래밍 언어에서 지원되는 열거 형 유형과 동일합니다.
다른 유형과 달리 열거 유형은 CREATE TYPE 명령을 사용하여 작성해야합니다. 이 유형은 정적이고 순서가 지정된 값 세트를 저장하는 데 사용됩니다. 예를 들어 나침반 방향, 즉 NORTH, SOUTH, EAST 및 WEST 또는 아래 표시된 요일-
CREATE TYPE week AS ENUM ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');
열거 된 후에는 다른 유형과 마찬가지로 사용할 수 있습니다.
기하학적 유형
기하학적 데이터 유형은 2 차원 공간 객체를 나타냅니다. 가장 기본적인 유형 인 요점은 다른 모든 유형의 기초를 형성합니다.
이름 | 저장 크기 | 대표 | 기술 |
---|---|---|---|
포인트 | 16 바이트 | 비행기 위의 포인트 | (x, y) |
선 | 32 바이트 | 무한 라인 (완전히 구현되지 않음) | ((x1, y1), (x2, y2)) |
lseg | 32 바이트 | 유한 선분 | ((x1, y1), (x2, y2)) |
상자 | 32 바이트 | 직사각형 상자 | ((x1, y1), (x2, y2)) |
통로 | 16 + 16n 바이트 | 닫힌 경로 (폴리곤과 유사) | ((x1, y1), ...) |
통로 | 16 + 16n 바이트 | 열린 경로 | [(x1, y1), ...] |
다각형 | 40 + 16n | 다각형 (닫힌 경로와 유사) | ((x1, y1), ...) |
원 | 24 바이트 | 원 | <(x, y), r> (중심점 및 반경) |
네트워크 주소 유형
PostgreSQL은 IPv4, IPv6 및 MAC 주소를 저장하는 데이터 유형을 제공합니다. 네트워크 주소를 저장하려면 일반 텍스트 유형 대신 이러한 유형을 사용하는 것이 좋습니다. 이러한 유형은 입력 오류 검사와 특수 연산자 및 함수를 제공하기 때문입니다.
이름 | 저장 크기 | 기술 |
---|---|---|
cidr | 7 또는 19 바이트 | IPv4 및 IPv6 네트워크 |
inet | 7 또는 19 바이트 | IPv4 및 IPv6 호스트 및 네트워크 |
macaddr | 6 바이트 | MAC 주소 |
비트 문자열 유형
비트 문자열 유형은 비트 마스크를 저장하는 데 사용됩니다. 0 또는 1입니다. 두 가지 SQL 비트 유형이 있습니다.bit(n) 과 bit varying(n), 여기서 n은 양의 정수입니다.
텍스트 검색 유형
이 유형은 쿼리와 가장 일치하는 문서를 찾기 위해 자연어 문서 모음을 검색하는 활동 인 전체 텍스트 검색을 지원합니다. 이것에 대한 두 가지 데이터 유형이 있습니다-
S. 아니. | 이름 및 설명 |
---|---|
1 | tsvector 이것은 "lexemes"라고하는 동일한 단어의 여러 변형을 병합하도록 정규화 된 고유 한 단어의 정렬 된 목록입니다. |
2 | tsquery 검색 할 어휘를 저장하고 부울 연산자 & (AND), | (OR) 및! (아니). 괄호를 사용하여 연산자를 그룹화 할 수 있습니다. |
UUID 유형
UUID (Universally Unique Identifiers)는 하이픈으로 구분 된 여러 그룹, 특히 8 자리 그룹, 4 자리 그룹 3 개, 12 자리 그룹 순으로 일련의 소문자 16 진수 숫자로 작성됩니다. 128 비트를 나타내는 총 32 자리입니다.
UUID의 예는 − 550e8400-e29b-41d4-a716-446655440000입니다.
XML 유형
XML 데이터 유형을 사용하여 XML 데이터를 저장할 수 있습니다. XML 데이터를 저장하려면 먼저 다음과 같이 xmlparse 함수를 사용하여 XML 값을 만들어야합니다.
XMLPARSE (DOCUMENT '<?xml version="1.0"?>
<tutorial>
<title>PostgreSQL Tutorial </title>
<topics>...</topics>
</tutorial>')
XMLPARSE (CONTENT 'xyz<foo>bar</foo><bar>foo</bar>')
JSON 유형
JSON의 데이터 형식은 JSON (JavaScript Object Notation) 데이터를 저장하는 데 사용할 수 있습니다. 이러한 데이터는 text 로 저장할 수도 있지만 json 데이터 유형은 저장된 각 값이 유효한 JSON 값인지 확인하는 이점이 있습니다. 다음과 같이 JSON 데이터 유형을 처리하는 데 직접 사용할 수있는 관련 지원 기능도 있습니다.
예 | 결과 예 |
---|---|
array_to_json ( '{{1,5}, {99,100}}':: int []) | [[1,5], [99,100]] |
row_to_json (row (1, 'foo')) | { "f1": 1, "f2": "foo"} |
어레이 유형
PostgreSQL은 테이블의 열을 가변 길이 다차원 배열로 정의 할 수있는 기회를 제공합니다. 내장 또는 사용자 정의 기본 유형, 열거 유형 또는 복합 유형의 배열을 작성할 수 있습니다.
배열 선언
배열 유형은 다음과 같이 선언 할 수 있습니다.
CREATE TABLE monthly_savings (
name text,
saving_per_quarter integer[],
scheme text[][]
);
또는 키워드 "ARRAY"를 사용하여
CREATE TABLE monthly_savings (
name text,
saving_per_quarter integer ARRAY[4],
scheme text[][]
);
값 삽입
배열 값은 중괄호로 요소 값을 묶고 쉼표로 구분하여 리터럴 상수로 삽입 할 수 있습니다. 아래에 예가 나와 있습니다.
INSERT INTO monthly_savings
VALUES (‘Manisha’,
‘{20000, 14600, 23500, 13250}’,
‘{{“FD”, “MF”}, {“FD”, “Property”}}’);
어레이 액세스
배열에 액세스하는 예는 다음과 같습니다. 아래의 명령은 4 분기보다 2 분기에 저축이 더 많은 사람을 선택합니다.
SELECT name FROM monhly_savings WHERE saving_per_quarter[2] > saving_per_quarter[4];
배열 수정
배열 수정의 예는 아래와 같습니다.
UPDATE monthly_savings SET saving_per_quarter = '{25000,25000,27000,27000}'
WHERE name = 'Manisha';
또는 ARRAY 표현식 구문 사용-
UPDATE monthly_savings SET saving_per_quarter = ARRAY[25000,25000,27000,27000]
WHERE name = 'Manisha';
어레이 검색
배열 검색의 예는 아래와 같습니다.
SELECT * FROM monthly_savings WHERE saving_per_quarter[1] = 10000 OR
saving_per_quarter[2] = 10000 OR
saving_per_quarter[3] = 10000 OR
saving_per_quarter[4] = 10000;
배열의 크기를 알면 위에 주어진 검색 방법을 사용할 수 있습니다. 그렇지 않으면 다음 예제는 크기를 알 수없는 경우 검색하는 방법을 보여줍니다.
SELECT * FROM monthly_savings WHERE 10000 = ANY (saving_per_quarter);
복합 유형
이 유형은 필드 이름 및 해당 데이터 유형 목록, 즉 행 구조 또는 테이블 레코드를 나타냅니다.
복합 유형 선언
다음 예제는 복합 유형을 선언하는 방법을 보여줍니다.
CREATE TYPE inventory_item AS (
name text,
supplier_id integer,
price numeric
);
이 데이터 유형은 아래와 같이 테이블 생성에 사용할 수 있습니다.
CREATE TABLE on_hand (
item inventory_item,
count integer
);
복합 값 입력
복합 값은 괄호로 필드 값을 묶고 쉼표로 구분하여 리터럴 상수로 삽입 할 수 있습니다. 아래에 예가 나와 있습니다.
INSERT INTO on_hand VALUES (ROW('fuzzy dice', 42, 1.99), 1000);
위에 정의 된 inventory_item에 유효합니다 . ROW 키워드는 표현식에 둘 이상의 필드가있는 한 실제로 선택 사항입니다.
복합 유형 액세스
복합 열의 필드에 액세스하려면 테이블 이름에서 필드를 선택하는 것처럼 점 다음에 필드 이름을 사용합니다. 예를 들어, on_hand 예제 테이블에서 일부 하위 필드를 선택하려면 쿼리는 다음과 같습니다.
SELECT (item).name FROM on_hand WHERE (item).price > 9.99;
다음과 같이 테이블 이름도 사용할 수 있습니다 (예 : 다중 테이블 쿼리).
SELECT (on_hand.item).name FROM on_hand WHERE (on_hand.item).price > 9.99;
범위 유형
범위 유형은 데이터 범위를 사용하는 데이터 유형을 나타냅니다. 범위 유형은 불연속 범위 (예 : 모든 정수 값 1 ~ 10) 또는 연속 범위 (예 : 오전 10 : 00 ~ 오전 11:00 사이의 모든 시점) 일 수 있습니다.
사용 가능한 기본 제공 범위 유형에는 다음 범위가 포함됩니다.
int4range − 정수 범위
int8range − bigint 범위
numrange − 숫자 범위
tsrange − 시간대가없는 타임 스탬프 범위
tstzrange − 시간대가 포함 된 타임 스탬프 범위
daterange − 날짜 범위
사용자 정의 범위 유형은 inet 유형을 기본으로 사용하는 IP 주소 범위 또는 부동 데이터 유형을 기본으로 사용하는 부동 범위와 같은 새로운 유형의 범위를 사용할 수 있도록 만들 수 있습니다.
범위 유형은 각각 [] 및 () 문자를 사용하여 포함 및 제외 범위 경계를 지원합니다. 예를 들어 '[4,9)'는 4부터 9까지 포함하지만 포함하지 않는 모든 정수를 나타냅니다.
개체 식별자 유형
객체 식별자 (OID)는 PostgreSQL에서 내부적으로 다양한 시스템 테이블의 기본 키로 사용됩니다. 경우 WITH OIDS가 지정하거나 default_with_oids 환경의 구성 변수가 설정되어, 다음 단, 이러한 경우 사용자는 OID가 작성된 테이블에 추가된다. 다음 표에는 몇 가지 별칭 유형이 나열되어 있습니다. OID 별명 유형에는 특수 입력 및 출력 루틴을 제외하고는 자체 작업이 없습니다.
이름 | 참고 문헌 | 기술 | 값 예 |
---|---|---|---|
oid | 어떤 | 숫자 객체 식별자 | 564182 |
regproc | pg_proc | 기능 명 | 합집합 |
재 절차 | pg_proc | 인수 유형이있는 함수 | sum (int4) |
레고 퍼 | pg_operator | 운영자 이름 | + |
regoperator | pg_operator | 인수 유형이있는 연산자 | * (integer, integer) 또는-(NONE, integer) |
regclass | pg_class | 관계 이름 | pg_type |
regtype | pg_type | 데이터 유형 이름 | 정수 |
regconfig | pg_ts_config | 텍스트 검색 구성 | 영어 |
regdictionary | pg_ts_dict | 텍스트 검색 사전 | 단순한 |
의사 유형
PostgreSQL 유형 시스템에는 집합 적으로 의사 유형이라고하는 여러 특수 목적 항목이 포함되어 있습니다. 의사 유형은 열 데이터 유형으로 사용할 수 없지만 함수의 인수 또는 결과 유형을 선언하는 데 사용할 수 있습니다.
아래 표에는 기존 의사 유형이 나열되어 있습니다.
S. 아니. | 이름 및 설명 |
---|---|
1 | any 함수가 모든 입력 데이터 유형을 허용 함을 나타냅니다. |
2 | anyelement 함수가 모든 데이터 유형을 허용 함을 나타냅니다. |
삼 | anyarray 함수가 모든 배열 데이터 유형을 허용 함을 나타냅니다. |
4 | anynonarray 함수가 배열이 아닌 데이터 유형을 허용 함을 나타냅니다. |
5 | anyenum 함수가 모든 열거 형 데이터 유형을 허용 함을 나타냅니다. |
6 | anyrange 함수가 모든 범위 데이터 유형을 허용 함을 나타냅니다. |
7 | cstring 함수가 null로 끝나는 C 문자열을 받거나 반환 함을 나타냅니다. |
8 | internal 함수가 서버 내부 데이터 유형을 수락하거나 반환 함을 나타냅니다. |
9 | language_handler 절차 언어 호출 핸들러는 language_handler를 반환하도록 선언됩니다. |
10 | fdw_handler fdw_handler를 반환하도록 외부 데이터 래퍼 처리기가 선언됩니다. |
11 | record 지정되지 않은 행 유형을 반환하는 함수를 식별합니다. |
12 | trigger 트리거를 반환하기 위해 트리거 함수가 선언됩니다. |
13 | void 함수가 값을 반환하지 않음을 나타냅니다. |