PostgreSQL은 (보통 기본 키용으로) 자동 증가 ID를 sequence — 고유하게 증가하는 숫자를 생성하는 특수 객체 — 를 사용해 생성합니다. **SERIAL**은 sequence를 자동으로 생성하는 축약 표현이고, **IDENTITY**는 현대적인 SQL 표준 등가물입니다.
SERIAL — 고전적 축약 표현
users (
id SERIAL ,
name TEXT
);
users (name) ();
PostgreSQL은 (보통 기본 키용으로) 자동 증가 ID를 sequence — 고유하게 증가하는 숫자를 생성하는 특수 객체 — 를 사용해 생성합니다. **SERIAL**은 sequence를 자동으로 생성하는 축약 표현이고, **IDENTITY**는 현대적인 SQL 표준 등가물입니다.
users (
id SERIAL ,
name TEXT
);
users (name) ();
SERIAL은 자동으로 sequence를 생성하고 컬럼 기본값을 그 다음 값을 가져오도록 설정합니다. BIGSERIAL은 더 큰 범위를 위해 BIGINT를 사용합니다(약 20억 행을 초과할 수 있는 테이블에 중요).
CREATE TABLE users (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, -- SQL 표준, 권장
name TEXT
);
-- GENERATED ALWAYS → 값을 수동 삽입할 수 없음 (더 깔끔)
-- GENERATED BY DEFAULT → 필요 시 수동 오버라이드 허용
GENERATED ... AS IDENTITY는 현대적인 SQL 표준 방식이며(새 코드에서 SERIAL보다 선호됨), 더 깔끔하고 일부 SERIAL 특이점(소유권/권한 엣지 케이스 등)을 피합니다.
CREATE SEQUENCE my_seq START 1 INCREMENT 1;
SELECT nextval('my_seq'); -- 다음 값 얻기 (sequence 진행)
SELECT currval('my_seq'); -- 내가 마지막으로 얻은 값
SELECT setval('my_seq', 100); -- 현재 값 설정
sequence는 독립적인 카운터입니다. SERIAL/IDENTITY는 내부적으로 이를 사용합니다. 참고: sequence는 transaction에 의해 롤백되지 않으므로(롤백 후 ID에 간격이 생길 수 있음 — 정상적이고 예상되는 동작입니다).
-- RETURNING — INSERT에서 생성된 id를 돌려받기 (매우 유용)
INSERT INTO users (name) VALUES ('Ann') RETURNING id;
자동 증가 ID는 기본적입니다 — 거의 모든 테이블에 고유 기본 키가 필요하고 자동 생성되는 순차 ID가 표준 방식이므로, PostgreSQL이 이를 어떻게 처리하는지 이해하는 것은 필수적인 일상 지식입니다.
SERIAL(sequence를 자동 생성하는 고전적이고 흔한 축약 표현)과 특히 IDENTITY(GENERATED ... AS IDENTITY — 새 코드를 위한 현대적이고 SQL 표준이며 권장되는 방식으로, 더 깔끔하고 SERIAL의 특이점을 피함)를 아는 것은 기본 키를 올바르게 정의하는 데 중요합니다.
기저의 sequence(고유 증가 값을 생성하는 독립 카운터)를 이해하면 자동 증가의 동작 원리를 명확히 알 수 있고 고급 제어(nextval, setval)에 유용합니다.
두 가지 실용적 요점이 중요합니다. 크게 성장할 수 있는 테이블에는 BIGSERIAL/BIGINT를 선택하는 것(정수 오버플로 방지 — 실제 우려사항), 그리고 sequence는 transaction에 의해 롤백되지 않는다는 것을 아는 것(롤백이나 실패한 삽입 후 ID에 간격이 생길 수 있음 — 일부를 놀라게 하는 정상적이고 예상되는 동작)입니다.
INSERT에서 생성된 ID를 돌려받는 RETURNING 절도 가치 있는 일상 지식입니다.
모든 테이블에 기본 키가 필요하고 자동 증가 ID가 표준이며, SERIAL 대 권장되는 IDENTITY, 기저의 sequence, 크기 조정(BIGSERIAL), 간격 동작, RETURNING을 이해하면 실용적 필요를 충족하므로, PostgreSQL의 자동 증가 ID 생성 방식을 아는 것은 Postgres 테이블 작업에 기본적이고 자주 적용되는 지식이며, 현대적 모범 사례(IDENTITY)를 아는 것이 현재의 Postgres 역량을 반영하는 흔한 지점입니다.