자동 번호를 만드는 세 방식
PostgreSQL에는 기본 키 값을 자동으로 만드는 대표적인 선택이 세 가지 있어. 겉으로 비슷해도 표준 준수, 값의 크기, 외부 노출, 색인 지역성이 달라서 처음부터 목적에 맞게 골라야 해.
SERIAL은 기존 스키마를 위한 방식
SERIAL은 뒤에서 시퀀스를 만들고 열의 기본값에 연결하는 오래된 편의 문법이야. 동작은 하지만 생성 규칙이 느슨하고 사용자가 값을 덮어쓸 수 있어. 새 테이블에는 더 분명한 IDENTITY를 우선해.
IDENTITY는 새 정수 키의 기본 선택
GENERATED ALWAYS AS IDENTITY는 SQL 표준 방식이고 임의 삽입을 막아. 필요한 경우에만 GENERATED BY DEFAULT AS IDENTITY로 값을 직접 넣을 수 있게 해. 정수 키는 작아서 JOIN에 유리해.
UUID는 외부와 분산 경계에 강해
UUID는 128비트 식별자라 여러 시스템에서 따로 만들어도 충돌 가능성이 극히 낮아. 무작위 uuidv4()는 색인의 여러 위치에 흩어져 들어가지만, PG 18부터 내장된 uuidv7()은 시간 순서를 품어 B-tree 끝부분에 모여. PG 18 이전에는 확장 기능을 검토해.
목적에 따라 나눠 써
내부 JOIN에는 INTEGER GENERATED ALWAYS AS IDENTITY처럼 작은 키를 쓰고, 외부 URL에는 별도 uuid를 두는 방식도 좋아. 순차 id를 공개하면 외부에서 규모를 짐작하거나 값을 순회할 수 있어. 공개 키라면 가능할 때 uuidv7()을 우선해.