Skip to content

PostgreSQL 데이터 타입 해설

흔히 쓰는 PostgreSQL 컬럼 데이터 타입을 패밀리별로 정리했습니다: 정수, 소수, 텍스트, 시간, 불리언과 UUID, JSON, 네트워크 주소, 복합 타입, 확장 타입. 각 행은 해당 타입이 무엇을 저장하는지, 언제 선택해야 하는지 보여줍니다.

PostgreSQL에는 수십 가지 타입이 있지만 일상적인 스키마 설계는 핵심 세트를 사용합니다. 반복되는 선택은 이렇습니다: 숫자는 integer 대 numeric, 문자열은 varchar 대 text(text면 대부분 충분), 시각은 timestamp 대 timestamptz(실세계의 어떤 순간이든 timestamptz 권장), 그리고 json 대 jsonb(jsonb 권장 — 이진 형식에 인덱싱 가능). 범위 안에서 가장 구체적인 타입을 고르세요. 데이터베이스가 대신 강제합니다.

참고 표 · 46 항목
46 of 46 rows
정수
-32768부터 32767까지의 2바이트 정수.드묾. 공간을 꼭 절약해야 할 때만.
4바이트 정수. 대략 ±20억.기본 정수 컬럼.
8바이트 정수. 대략 ±900경.아주 큰 카운터나 외부 ID.
자동 증가하는 4바이트 정수.구식 자동 번호 키. PG 10부터는 GENERATED AS IDENTITY가 권장 대체재.
serial의 2바이트 및 8바이트 변형.smallint 또는 bigint 컬럼에 맞춘 자동 번호 부여.
테이블이 대신 생성해 주는 정수(GENERATED ALWAYS AS IDENTITY).현대적인 serial. SQL 표준이며 수동 INSERT에도 더 안전.
소수와 부동소수점
임의 정밀도의 정확한 십진수.금액처럼 반올림 오차를 용납하지 않는 모든 경우.
4바이트 단정도 부동소수점.정밀도가 결정적이지 않은 근사 과학 값.
8바이트 배정도 부동소수점.지리 공간, 통계, ML 특성 값.
고정 로캐일을 가진 통화 금액.거의 안 씀. 앱 쪽에서 통화 코드를 다루는 numeric이 이식성이 더 좋음.
텍스트
고정 길이 텍스트. 공백으로 채움.폭이 정해진 코드. 거의 불필요.
선택적 상한이 있는 가변 길이 텍스트.사용자명이나 이메일 같은 길이 제한 문자열.
길이 제한 없는 가변 길이 텍스트.범용 문자열 컬럼. varchar 대비 성능 페널티 없음.
시간
시각 없는 달력 날짜.생년월일과 마감일.
하루 중의 시각. 시간대 포함 여부 선택.일일 알림이나 매장 운영 시간.
시간대 없는 날짜와 시각.레거시 스키마. 새 작업에는 피하세요.
UTC로 저장되고 클라이언트 시간대로 표시되는 날짜와 시각.실세계 순간의 기본값. timestamp보다 이쪽을 권장.
2일 또는 3시간 같은 시간의 길이.기간과 날짜 연산.
불리언, UUID, 바이트
참 또는 거짓.플래그와 토글.
128비트 범용 고유 식별자.노출해도 안전한 비순차 ID(앱 또는 gen_random_uuid로 생성).
원시 바이너리 바이트.블롭, 이미지, 불투명 페이로드. 큰 파일은 오브젝트 스토리지 권장.
고정 또는 가변 길이 비트열.압축된 플래그와 프로토콜 필드. 단일 on/off 값은 여전히 boolean.
JSON과 반구조화 데이터
이진 형태로 파싱되어 인덱싱 가능한 JSON.유연하거나 중첩된 데이터. 권장되는 JSON 컬럼(GIN 인덱스 지원).
원본 텍스트 그대로 보관하는 JSON.드묾. 키 순서나 정확한 공백을 보존해야 할 때만.
XML 텍스트.XML이 필요한 레거시 연동.
JSON 데이터를 탐색하는 컴파일된 경로 식.jsonb_path_query와 SQL/JSON 연산자로 jsonb 내부 필터링.
네트워크와 검색
IPv4 또는 IPv6 호스트 주소.클라이언트·서버 IP 저장.
10.0.0.0/24 같은 IP 네트워크 블록.방화벽 규칙과 서브넷 범위.
6바이트 또는 8바이트(EUI-64) MAC 주소.장치와 네트워크 인터페이스 식별자.
전문 검색용으로 전처리된 텍스트.별도 검색 엔진으로 가기 전의 PostgreSQL 내장 검색.
AND, OR, 접두사 연산자로 조합한 검색어.전문 검색의 쿼리 쪽. @@로 tsvector와 매칭.
선행 기록 로그 위치, 로그 시퀀스 번호.복제 지연과 백업 모니터링.
복합 및 고급 타입
임의 기본 타입의 배열. 예: integer[].단순 값 목록. 요소가 자체 컬럼을 필요로 하면 자식 테이블로 전환.
직접 정의한 고정 목록 중 하나의 값.안정적인 선택지를 가진 상태 필드.
여러 필드로 구성된 커스텀 행 타입.테이블 전체에서 공유되는 반복되는 필드 그룹.
두 경계 사이의 연속 범위.겹침 연산자와 함께 일정, 가격대, 버전 구간.
직접 정의한 제약으로 감싼 기본 타입.비어 있지 않은 이메일 같은 재사용 가능한 규칙. 사용하는 모든 컬럼에서 강제됨.
타입이 지정된 값들의 무명 행.PL/pgSQL 함수 반환과 중간 쿼리 결과.
내장 2차원 기하 값.간단한 평면 기하. 실세계 위치에는 PostGIS 필요.
부호 없는 4바이트 시스템 객체 식별자.시스템 카탈로그 조인용. 애플리케이션 컬럼에는 부적합.
63자 내부 식별자 문자열.카탈로그 조회용. 사용자에게 보이는 데이터는 일반 text.
확장 타입
하나의 값에 담긴 키/값 문자열 쌍(확장).평면 맵. 오늘날에는 jsonb가 더 나은 선택.
news.tech.ai 같은 계층 라벨 경로(확장).조상·자손 쿼리가 필요한 트리.
대소문자를 구분하지 않고 비교하는 텍스트(확장).lower() 인덱스 없이 이메일 같은 대소문자 무시 유일성.
PostGIS 확장의 지리·기하 객체.거리, 포함, 공간 인덱스 쿼리.
UUID 값을 생성하는 확장 함수들.레거시 생성 방식. PG 13부터 gen_random_uuid() 내장.