PostgreSQL스키마와 제약

PRIMARY KEY, UNIQUE, NOT NULL

PostgreSQL 스키마 설계에서 가장 자주 쓰는 기본 제약 조건인 PRIMARY KEY, UNIQUE, NOT NULL의 역할을 비교해 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

text
CREATE TABLE users (
  id BIGSERIAL PRIMARY KEY,
  email TEXT NOT NULL UNIQUE,
  nickname TEXT UNIQUE,
  name TEXT NOT NULL
);

설명

  • PRIMARY KEY는 각 행을 유일하게 식별하는 대표 키입니다. 보통 테이블당 하나만 두고, 다른 테이블이 이 값을 참조하게 됩니다.
  • UNIQUE는 특정 열 값이 중복되지 않도록 강제합니다. 이메일, 사용자 이름, 외부 시스템 식별자 같은 값에 자주 씁니다.
  • NOT NULL은 값이 비어 있으면 안 되는 열을 지정합니다. 이름, 생성 시각, 상태값처럼 항상 있어야 하는 값에 중요합니다.
  • 세 제약은 서로 비슷해 보여도 역할이 다릅니다. PRIMARY KEY는 식별, UNIQUE는 중복 금지, NOT NULL은 값 필수라는 규칙을 담당합니다.
  • 애플리케이션 코드에서도 검사할 수 있지만, 데이터베이스 차원 제약을 함께 두어야 여러 경로에서 들어오는 데이터 품질을 지킬 수 있습니다.

짧은 예제

text
ALTER TABLE posts
ADD CONSTRAINT posts_slug_unique UNIQUE (slug);

빠른 정리

제약의미
PRIMARY KEY행을 대표하는 유일 식별자
UNIQUE중복 금지
NOT NULL빈 값 금지
함께 사용"필수이면서 중복 불가" 규칙 표현 가능

주의할 점

UNIQUE만 있다고 해서 그 열이 항상 채워지는 것은 아닙니다. "반드시 있어야 하고 중복도 안 된다"는 요구라면 NOT NULLUNIQUE를 함께 고려해야 합니다.

참고 링크

1 sources