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 digitsdate 유형, 그 해상도는 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

함수가 값을 반환하지 않음을 나타냅니다.