UUID 함수

UUID 함수

테이블의 기본 키로 랜덤 UUID를 쓴다면, 그 UUID를 PostgreSQL에서 직접 생성하는 게 가장 편해요. gen_random_uuid()만 있어도 충분하지만, 버전별 특성이 다르고 시간 순서를 보존하는 UUID가 필요한 경우도 있어요. 이 페이지에서는 UUID를 생성하고, 생성된 UUID에서 정보를 추출하는 PostgreSQL 함수들을 살펴볼게요.

출처: PostgreSQL 공식 문서 — UUID Functions

UUID 생성 함수

PostgreSQL이 제공하는 UUID 생성 함수는 두 가지예요.

함수 설명 예시
gen_random_uuid()uuid 버전 4(랜덤) UUID를 생성해요. gen_random_uuid()5b30857f-0bfa-48b5-ac0b-5c64e28078d1
uuidv4()uuid 버전 4(랜덤) UUID를 생성해요. uuidv4()b42410ee-132f-42ee-9e4f-09a6485c95b8
uuidv7([shift interval])uuid 버전 7(시간 순서) UUID를 생성해요. 타임스탬프는 UNIX 밀리초 정밀도 + sub-millisecond 타임스탬프 + 랜덤으로 계산돼요. uuidv7()019535d9-3df7-79fb-b466-fa907fa17f9e

uuidv7()의 선택 인자 shift는 계산된 타임스탬프를 주어진 interval만큼 이동시켜요. 무한(Infinity 등)한 interval 값은 받지 않아요. 이동된 타임스탬프는 버전 7의 48비트 밀리초 필드가 지원하는 범위(1970-01-01 00:00:00 UTC부터 대략 서기 10889년까지) 안에 있어야 하고, 이 범위를 벗어나면 오류가 발생해요.

참고로 uuid-ossp 모듈은 UUID를 생성하는 다른 표준 알고리즘을 구현한 추가 함수들을 제공해요.

UUID 정보 추출 함수

생성된 UUID에서 정보를 뽑아내는 함수도 있어요.

함수 설명 예시
uuid_extract_timestamp(uuid)timestamp with time zone 버전 1 또는 7 UUID에서 timestamp with time zone을 추출해요. 다른 버전이면 NULL을 반환해요. uuid_extract_timestamp('019535d9-3df7-79fb-b466-fa907fa17f9e'::uuid)2025-02-23 21:46:24.503-05
uuid_extract_version(uuid)smallint RFC 9562가 기술하는 변형(variant) 중 하나인 UUID에서 버전을 추출해요. 다른 변형이면 NULL을 반환해요. uuid_extract_version('41db1265-8bc1-4ab3-992f-885799a4af1d'::uuid)4

예를 들어 gen_random_uuid()로 생성된 UUID라면 uuid_extract_version()은 4를, uuidv7()로 생성된 거라면 7을 반환해요.

uuid_extract_timestamp로 추출한 타임스탬프가 UUID가 생성된 시각과 정확히 같지 않을 수도 있어요. 이는 UUID를 생성한 구현에 달려 있어요.

PostgreSQL은 UUID에 대해 일반적인 비교 연산자(Table 9.1)도 제공해요. uuid 데이터 타입 자체에 대한 자세한 내용은 Section 8.12에서 다룬답니다.

더 알아보기 (Learn more)