한양과학기술고등학교

에듀테크 프로젝트 대시보드

데이터 타입

integer numeric text boolean uuid IDENTITY

타입을 정확히 고르면 저장공간·검증·인덱스 효율이 모두 좋아집니다. PostgreSQL 은 타입에 엄격합니다.

1. 숫자

타입범위 / 용도
smallint / integer / bigint정수 2 / 4 / 8바이트
numeric(p, s)정확한 십진수 — 돈·비율은 반드시 이것 (반올림 오차 없음)
real / double precision부동소수 — 과학 계산용, 금액 금지
price   numeric(12, 2)   -- 최대 9,999,999,999.99
ratio   numeric(5, 4)    -- 0.0000 ~ 9.9999

2. 문자열

권장
  • text 를 기본으로 쓰세요 — varchar(n) 와 성능 차이 없음
  • varchar(n) 는 길이 상한이 도메인 규칙일 때만 (예: 국가코드 char(2))
  • 길이 검증은 CHECK (char_length(x) <= 100) 로도 가능

3. 자동 증가 PK

-- 권장 (SQL 표준)
CREATE TABLE users (
    id   bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    ...
);

-- 구식 serial (여전히 흔함) = integer + sequence + default
CREATE TABLE users ( id bigserial PRIMARY KEY, ... );
IDENTITY vs serial
  • GENERATED ALWAYS 는 실수로 id 에 직접 값을 넣는 것을 막음 (OVERRIDING SYSTEM VALUE 로만 가능)
  • serial 은 컬럼 삭제 시 시퀀스가 남는 등 관리가 지저분함

4. UUID·불리언·기타

id      uuid DEFAULT gen_random_uuid()   -- PG13+ 내장 (pgcrypto 불필요)
is_active boolean DEFAULT true         -- true/false/'t'/'f'/1/0
data    bytea                           -- 바이너리
tags    text[]                          -- 배열 (다음 장)
price_range int4range                   -- 범위 타입
"정규화로 시작하고, 측정한 뒤에 비정규화하라"