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

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