- 해당 타입에는 bool과 boolean으로 동일한 논리적인 참과 거짓을 나타내는 데이터 타입을 의미합니다. - 해당 타입의 값은 TRUE(참)과 FALSE(거짓)을 표현하는데 유연한 다양한 방식들을 지원합니다. - 주로 해당 타입은 조건부 식이나 논리 연산에서 자주 사용됩니다. 예를 들어, WHERE 절에서 특정 조건을 검사하거나, 참/거짓 값을 반환하는 함수를 작성할 때 사용할 수 있습니다.
- 고정 길이의 문자열은 지정한 자리수만큼의 문자열만 들어올 수 있고 가변 길이 문자열의 경우는 ‘최대’ 지정한 자리수 만큼의 문자열이 들어올 수 있습니다.
💡 TEXT 타입과 VARCHAR 타입이 동일하다는 거야?
- TEXT 타입의 경우 길이의 지정된 값이 없다는 표현이고 VARCHAR의 경우는 가변 길이 문자열이지만 자리수를 지정하지 않으면 길이의 지정된 값이 없다는 표현입니다.
💡 사용예시
- x, y, z라는 컬럼을 구성하였습니다. 각각 고정 길이 문자열, 가변 길이 문자열, 긴 문자열 형태로 각각의 타입을 지정하였습니다.
# 테이블 구성
CREATETABLE character_tests (
id serial PRIMARY KEY,
x CHAR (1),
y VARCHAR (10),
z TEXT
);
# 테이블 데이터 삽입 OK
INSERTINTO character_tests (x, y, z)
VALUES( 'Y','varchar(n)','This is a very long text for the PostgreSQL text column'
);
4) 데이터 타입 종류 : Numeric
💡 데이터 타입 종류 : Numeric
데이터 타입
Storage Size
분류
설명
SMALLINT(=INT2)
2byte
정수
16비트 정수 값을 나타내는 데이터 타입입니다. (-32,768 ~ +32,767)
INTEGER(=INT)(=INT4)
4byte
정수
32비트 정수 값을 나타내는 데이터 타입입니다. (-2,147,483,648 ~ +2,147,483,647)
BIGINT(=INT8)
8byte
정수
64비트 정수 값을 나타내는 데이터 타입입니다. (-9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807)
SMALLSERIAL(=SERIAL2)
2byte
자동 증가 정수
16비트 정수 값의 자동 생성 열을 나타내는 데이터 타입입니다.
SERIAL(=SERIAL4)
4byte
자동 증가 정수
32비트 정수 값의 자동 생성 열을 나타내는 데이터 타입입니다.
BIGSERIAL(=SERIAL8)
8byte
자동 증가 정수
64비트 정수 값의 자동 생성 열을 나타내는 데이터 타입입니다.
REAL (=FLOAT4)
4byte
부동 소수점 숫자
32비트 부동 소수점 숫자 값을 나타내는 데이터 타입입니다.
FLOAT(n)
-
부동 소수점 숫자
정밀도가 n인 부동 소수점 숫자 값을 나타내는 데이터 타입입니다.
FLOAT8
8byte
부동 소수점 숫자
64비트 부동 소수점 숫자 값을 나타내는 데이터 타입입니다.
DOUBLE PRECISION
8byte
부동 소수점 숫자
64비트 부동 소수점 숫자 값을 나타내는 데이터 타입입니다.
NUMERIC(p, s)
-
부동 소수점 숫자
고정된 소수점 숫자 값을 나타내는 데이터 타입입니다. 전체 자릿수는 p이고, 소수 자릿수는 s입니다.
1. INTEGERS
데이터 타입
Storage Size
분류
설명
SMALLINT(=INT2)
2byte
정수
16비트 정수 값을 나타내는 데이터 타입입니다. (-32,768 ~ +32,767)
INTEGER(=INT)(=INT4)
4byte
정수
32비트 정수 값을 나타내는 데이터 타입입니다. (-2,147,483,648 ~ +2,147,483,647)
BIGINT(=INT8)
8byte
정수
64비트 정수 값을 나타내는 데이터 타입입니다. (-9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807)
- p는 전체 자릿수를 의미하며 s는 소수 자릿수를 의미합니다. 이는 p만큼의 숫자를 저장하고 s만큼의 소수 자릿수를 저장합니다. - 아래의 경우 최대 숫자가 10개의 자릿수를 가지며 소수 2번째만큼 소수 자릿수를 저장합니다.
CREATETABLE my_table (
id INT,
amount NUMERIC(10, 2)
);
# NUMERIC(10, 2)로 지정하였을 경우 12345.67, 9876.54라는 값을 저장할 수 있습니다.
NUMERIC(10, 2)
# NUMERIC(5, 3)로 지정하였을 경우 12.345, 6.789라는 값을 저장할 수 있습니다.
NUMERIC(5, 3)
# NUMERIC(8, 0)로 지정하였을 경우 12345678, 98765432라는 값을 지정할 수 있습니다.
NUMERIC(8, 0)
- 해당 데이터 타입은 데이터 형태에 따라 다양한 데이터 타입을 넣을 수 있는 형태의 데이터 타입입니다.
데이터 타입
구조
설명
ARRAY
배열
여러 값의 컬렉션을 나타내는 데이터 타입입니다.
JSON
JSON
JSON(JavaScript Object Notation) 형식의 데이터를 나타내는 데이터 타입입니다.
JSONB
JSON
바이너리 형식으로 저장된 JSON 데이터를 나타내는 데이터 타입입니다.
HSTORE
기타
키-값 쌍의 컬렉션을 나타내는 데이터 타입입니다.
UUID
기타
범용 고유 식별자(UUID) 값을 나타내는 데이터 타입입니다.
1. ARRAY
💡 ARRAY
- 여러 값을 하나의 필드에 저장하기 위해 사용되는 데이터 유형입니다. 배열은 동일한 데이터 유형의 값들의 컬렉션으로 구성됩니다. - PostgreSQL에서는 배열을 다양한 방식으로 사용할 수 있습니다. 배열을 선언하고 초기화하거나, 배열 요소를 추가하거나 제거하거나 수정하거나 검색하는 등의 작업이 가능합니다.
데이터 유형
설명
integer[]
정수 배열
text[]
텍스트 배열
varchar[]
가변 길이 문자열 배열
boolean[]
부울 배열
date[]
날짜 배열
timestamp[]
타임스탬프 배열
json[]
JSON 배열
jsonb[]
이진 형식의 JSON 배열
enum[]
열거형 배열
point[]
좌표 배열
circle[]
원 배열
interval[]
간격 배열
numeric[]
숫자 배열
geometry[]
공간 데이터 배열
💡 [참고] ARRAY 타입의 데이터 사용 예시
-- ARRAY 데이터 타입을 가진 테이블 생성CREATETABLE my_table (
id SERIAL PRIMARY KEY,
data TEXT[],
created_at TIMESTAMPDEFAULTCURRENT_TIMESTAMP
);
-- ARRAY 데이터 삽입INSERTINTO my_table (data) VALUES ('{"apple", "banana", "orange"}');
- 고유한 식별자를 생성하기 위해 사용되는 데이터 타입입니다. 128비트 숫자로 표현되며 일반적으로 16진수로 표기됩니다.
- 데이터베이스에서 유니크한 값을 생성하고 관리하는 데 사용됩니다. 이를 통해 데이터의 식별과 관련된 작업을 수행할 수 있습니다. UUID 값은 랜덤 하게 생성되며, 충돌이 거의 발생하지 않으므로 다른 데이터와의 중복을 걱정할 필요가 없습니다. - 예를 들어, 사용자 식별자, 주문 번호, 세션 토큰 등에 사용될 수 있습니다. 이러한 값들은 전역적으로 고유해야 하므로 UUID 타입이 적합한 선택입니다.
💡 사용예시
- uuid_generate_v4() 함수를 통해서 uuid 생성 v4버전을 이용하여 컬럼 추가 시 생성이 됩니다.
CREATETABLE contacts (
contact_id uuid DEFAULT uuid_generate_v4 (),
first_name VARCHARNOTNULL,
last_name VARCHARNOTNULL,
email VARCHARNOTNULL,
phone VARCHAR,
PRIMARY KEY (contact_id)
);
-- 아래와 같은 contact_id 컬럼 값을 반환 받습니다.40e6215d-b5c6-4896-987c-f30f3678f608
6ecd8c99-4036-403d-bf84-cf8400f67836
3f333df6-90a4-4fda-8dd3-9485d27cee36
- 해당 데이터 타입은 점, 선, 다각형 등의 기하학적 개체를 저장하고 쿼리 하는 데 사용됩니다. - 이를 사용하려면 공간 데이터를 저장하고 분석하는데 편리하며 위치 기반 서비스나 지리 정보 시스템에서 유용하게 활용할 수 있습니다.
데이터 타입
설명
BOX
2차원 공간에서 사각형을 나타내는 데이터 타입입니다.
LINE
2차원 공간에서 선을 나타내는 데이터 타입입니다.
POINT
2차원 공간에서 점을 나타내는 데이터 타입입니다.
LSEG
2차원 공간에서 선분을 나타내는 데이터 타입입니다.
POLYGON
2차원 공간에서 다각형을 나타내는 데이터 타입입니다.
1. BOX
💡 BOX
- 2차원 공간에서 '직사각형 상자'를 나타냅니다. 왼쪽 아래 모퉁이와 오른쪽 위 모퉁이로 정의됩니다.
-- BOX 컬럼을 가진 테이블 생성CREATETABLE my_table (
id SERIAL PRIMARY KEY,
box_column BOX
);
-- 데이터 삽입INSERTINTO my_table (box_column) VALUES ('(1,1), (3,3)');
2. LINE
💡 LINE
- 2차원 공간에서 선분을 나타냅니다. 시작점과 끝점으로 정의됩니다.
-- LINE 컬럼을 가진 테이블 생성CREATETABLE my_table (
id SERIAL PRIMARY KEY,
line_column LINE
);
-- 데이터 삽입INSERTINTO my_table (line_column) VALUES ('(1,1), (5,5)');
3. POINT
💡 POINT - 2차원 공간에서 단일 점을 나타냅니다. x와 y 좌표로 정의됩니다.
-- POINT 컬럼을 가진 테이블 생성CREATETABLE my_table (
id SERIAL PRIMARY KEY,
point_column POINT
);
-- 데이터 삽입INSERTINTO my_table (point_column) VALUES ('(3,4)');
4. LSEG
💡 LSEG
- 2차원 공간에서 선분을 나타냅니다. 시작점과 끝점으로 정의됩니다.
-- LSEG 컬럼을 가진 테이블 생성CREATETABLE my_table (
id SERIAL PRIMARY KEY,
lseg_column LSEG
);
-- 데이터 삽입INSERTINTO my_table (lseg_column) VALUES ('(1,1), (5,5)');
5. POLYGON
💡 POLYGON - 2차원 공간에서 '폐쇄된 다각형'을 나타냅니다. 다각형의 꼭지점을 정의하는 점들로 구성됩니다.
-- POLYGON 컬럼을 가진 테이블 생성CREATETABLE my_table (
id SERIAL PRIMARY KEY,
polygon_column POLYGON
);
-- 데이터 삽입INSERTINTO my_table (polygon_column) VALUES ('((1,1), (3,1), (2,3), (1,1))');
8) 데이터 타입 종류 : Network(네트워크)
💡 데이터 타입 종류 : Network(네트워크)
- 해당 데이터는 네트워크에 사용되는 데이터들을 구조화된 형태로 넣을 수 있는 데이터 타입입니다.
데이터 타입
설명
INET
IPv4 또는 IPv6 주소를 나타내는 데이터 타입입니다.
MACADDR
MAC(Media Access Control) 주소를 나타내는 데이터 타입입니다.
CIDR
네트워크 주소 블록을 나타내는 데이터 타입입니다.
1. INET
💡 INET
- IPv4 또는 IPv6 주소를 나타내는 데이터 타입입니다.
-- INET 컬럼을 가진 테이블 생성CREATETABLE my_table (
id SERIAL PRIMARY KEY,
ip_address INET
);
-- 데이터 삽입INSERTINTO my_table (ip_address) VALUES ('192.168.0.1');
2. MACADDR
💡 MACADDR
- MAC(Media Access Control) 주소를 나타내는 데이터 타입입니다.
-- MACADDR 컬럼을 가진 테이블 생성CREATETABLE my_table (
id SERIAL PRIMARY KEY,
mac_address MACADDR
);
-- 데이터 삽입INSERTINTO my_table (mac_address) VALUES ('00:0a:95:9d:68:16');
3. CIDR
💡 CIDR
- 네트워크 주소 블록을 나타내는 데이터 타입입니다.
-- CIDR 컬럼을 가진 테이블 생성CREATETABLE my_table (
id SERIAL PRIMARY KEY,
network CIDR
);
-- 데이터 삽입INSERTINTO my_table (network) VALUES ('192.168.0.0/24');
9) 데이터 타입 종류 : Monentary (화폐)
데이터 타입
설명
MONEY
통화 값을 저장하는데 사용하는 데이터 타입입니다.
1. MONEY
💡MONEY
- 통화와 관련된 데이터를 저장하기 위한 데이터 타입입니다.
- 이 타입은 통화단위와 금액을 함께 저장할 수 있습니다. Money 타입은 정확한 소수점으로 금액을 저장하며, 소수점 이하 2자리까지 표현할 수 있습니다. - 이를 통해 정확한 금액 계산을 수행할 수 있습니다. Money 타입은 통화 기호를 포함하지 않으며, 숫자 값으로 저장됩니다. 이를 통해 다양한 통화 단위를 처리할 수 있습니다.
CREATETABLE transactions (
id SERIAL PRIMARY KEY,
amount MONEY
);
INSERTINTO transactions (amount)
VALUES ('$100.50');
💡 사용예시
- 화폐 단위를 달러(USD)에서 유로(ERU)로 변경을 하거나 화폐 단위를 달러(USD)에서 대한민국 원(KRW)으로 변환하는 방법을 확인해 봅니다.
-- 로케일 설정SET lc_monetary ='de_DE.UTF-8';
-- 통화 값 변경
UPDATE transactions
SET amount ='€100.50'WHERE id =1;
-- 로케일 설정SET lc_monetary ='ko_KR.UTF-8';
-- 통화 값 변경
UPDATE transactions
SET amount ='₩100,000'WHERE id =1;