데이터 타입
데이터 타입 (Data Types)
PostgreSQL은 정말 풍부한 데이터 타입을 기본으로 제공해요. 이 페이지는 그 타입들을 개괄적으로 보여드리면서, 어떤 타입이 있고 각각이 뭘 표현하는지 한눈에 잡을 수 있게 해줄게요. 각 타입의 상세 규칙(입력·출력 형식, 연산 등)은 하위 문서에서 따로 다루니까, 여기서는 큰 그림과 전체 목록을 익히는 데 집중하면 돼요. 필요하다면 CREATE TYPE 명령으로 완전히 새로운 타입을 추가할 수도 있어요.
전체 데이터 타입 목록 (Table of Data Types)
Table 8.1은 모든 내장 범용(general-purpose) 데이터 타입을 보여줘요. "Aliases(별칭)" 컬럼에 나오는 대안 이름 대부분은 PostgreSQL이 역사적인 이유로 내부에서 쓰는 이름이에요. 그 밖에 내부용이거나 더 이상 권장되지 않는(deprecated) 타입도 있지만 여기 목록에는 없어요.
Table 8.1. Data Types
| 이름 (Name) | 별칭 (Aliases) | 설명 (Description) |
|---|---|---|
bigint |
int8 |
부호 있는 8바이트 정수 (signed eight-byte integer) |
bigserial |
serial8 |
자동 증가 8바이트 정수 (autoincrementing eight-byte integer) |
bit [ (n) ] |
고정 길이 비트 문자열 (fixed-length bit string) | |
bit varying [ (n) ] |
varbit [ (n) ] |
가변 길이 비트 문자열 (variable-length bit string) |
boolean |
bool |
논리 불리언 (true/false) |
box |
평면 위의 사각형 상자 (rectangular box on a plane) | |
bytea |
이진 데이터 (“바이트 배열”) | |
character [ (n) ] |
char [ (n) ] |
고정 길이 문자 문자열 (fixed-length character string) |
character varying [ (n) ] |
varchar [ (n) ] |
가변 길이 문자 문자열 (variable-length character string) |
cidr |
IPv4 또는 IPv6 네트워크 주소 (network address) | |
circle |
평면 위의 원 (circle on a plane) | |
date |
달력 날짜 (년, 월, 일) | |
double precision |
float, float8 |
배정밀도 부동소수점 수 (8바이트) |
inet |
IPv4 또는 IPv6 호스트 주소 (host address) | |
integer |
int, int4 |
부호 있는 4바이트 정수 |
interval [ fields ] [ (p) ] |
시간 간격 (time span) | |
json |
텍스트형 JSON 데이터 | |
jsonb |
분해된(decomposed) 이진 JSON 데이터 | |
line |
평면 위의 무한 직선 (infinite line on a plane) | |
lseg |
평면 위의 선분 (line segment on a plane) | |
macaddr |
MAC (Media Access Control) 주소 | |
macaddr8 |
MAC 주소 (EUI-64 형식) | |
money |
통화 금액 (currency amount) | |
numeric [ (p, s) ] |
decimal [ (p, s) ] |
정밀도를 고를 수 있는 정확한 수 (exact numeric) |
path |
평면 위의 기하 경로 (geometric path on a plane) | |
pg_lsn |
PostgreSQL Log Sequence Number | |
pg_snapshot |
사용자 레벨 트랜잭션 ID 스냅샷 | |
point |
평면 위의 기하 점 (geometric point on a plane) | |
polygon |
평면 위의 닫힌 기하 경로 (closed geometric path) | |
real |
float4 |
단정밀도 부동소수점 수 (4바이트) |
smallint |
int2 |
부호 있는 2바이트 정수 |
smallserial |
serial2 |
자동 증가 2바이트 정수 |
serial |
serial4 |
자동 증가 4바이트 정수 |
text |
가변 길이 문자 문자열 | |
time [ (p) ] [ without time zone ] |
시간대 없는 시각 (time of day) | |
time [ (p) ] with time zone |
timetz |
시간대 포함 시각 |
timestamp [ (p) ] [ without time zone ] |
시간대 없는 날짜와 시각 | |
timestamp [ (p) ] with time zone |
timestamptz |
시간대 포함 날짜와 시각 |
tsquery |
텍스트 검색 쿼리 (text search query) | |
tsvector |
텍스트 검색 문서 (text search document) | |
txid_snapshot |
사용자 레벨 트랜잭션 ID 스냅샷 (deprecated, pg_snapshot 참고) |
|
uuid |
범용 고유 식별자 (universally unique identifier) | |
xml |
XML 데이터 |
타입 분류와 하위 문서 (Type Categories and Subsections)
데이터 타입은 성격에 따라 여러 그룹으로 나뉘는데, 각 그룹마다 별도 섹션이 있어요.
- 8.1. 숫자 타입 (Numeric Types) — 정수형(Integer Types), 임의 정밀도 숫자(Arbitrary Precision Numbers), 부동소수점 타입(Floating-Point Types), Serial 타입. → datatype-numeric
- 8.2. 통화 타입 (Monetary Types) —
money. → datatype-money - 8.3. 문자 타입 (Character Types) —
character,character varying,text. → datatype-character - 8.4. 이진 데이터 타입 (Binary Data Types) —
bytea(hex/escape 형식). → datatype-binary - 8.5. 날짜/시간 타입 (Date/Time Types) —
date,time,timestamp,interval과 시간대 처리. → datatype-datetime - 8.6. 불리언 타입 (Boolean Type) —
boolean. → datatype-boolean - 8.7. 열거 타입 (Enumerated Types) — 사용자 정의 enum. → datatype-enum
- 8.8. 기하 타입 (Geometric Types) —
point,line,lseg,box,path,polygon,circle. → datatype-geometric - 8.9. 네트워크 주소 타입 (Network Address Types) —
inet,cidr,macaddr,macaddr8. → datatype-net-types - 8.10. 비트 문자열 타입 (Bit String Types) —
bit,bit varying. → datatype-bit - 8.11. 텍스트 검색 타입 (Text Search Types) —
tsvector,tsquery. → datatype-textsearch - 8.12. UUID 타입 (UUID Type) —
uuid. → datatype-uuid - 8.13. XML 타입 (XML Type) —
xml. → datatype-xml - 8.14. JSON 타입 (JSON Types) —
json,jsonb,jsonpath. → datatype-json - 8.15. 배열 (Arrays) — 모든 타입의 배열. → arrays
- 8.16. 복합 타입 (Composite Types) — 행 구조를 담는 사용자 정의 타입. → rowtypes
- 8.17. 범위 타입 (Range Types) — 값의 범위와 multirange. → rangetypes
- 8.18. 도메인 타입 (Domain Types) — 기존 타입에 제약을 얹은 사용자 정의 타입. → domains
- 8.19. 객체 식별자 타입 (Object Identifier Types) — PostgreSQL 내부에서 쓰는 OID 계열. → datatype-oid
- 8.20. pg_lsn 타입 (pg_lsn Type) — 로그 시퀀스 번호. → datatype-pg-lsn
- 8.21. 의사 타입 (Pseudo-Types) — 함수 정의 등에서만 쓰는 특수 타입. → datatype-pseudo
호환성 (Compatibility)
SQL 표준이 지정한 타입(또는 그 표기법)은 다음과 같아요. bigint, bit, bit varying, boolean, char, character varying, character, varchar, date, double precision, integer, interval, numeric, decimal, real, smallint, time(시간대 유무 모두), timestamp(시간대 유무 모두), xml.
입력·출력 함수 (Input and Output Functions)
각 데이터 타입은 자신의 입력(input) 함수와 출력(output) 함수에 의해 결정되는 외부 표현(external representation)을 가져요. 내장 타입 중 상당수는 외부 형식이 명확하지만, PostgreSQL 고유한 타입(예: 기하 경로)이나 여러 가능한 형식을 가진 타입(예: 날짜·시간 타입)도 있어요. 또 일부 입력·출력 함수는 가역적이지 않아서(invertible), 출력 함수의 결과가 원래 입력에 비해 정확도를 잃을 수도 있다는 점을 기억해 두면 좋아요.