Postgre Sequence 세팅(Auto Increment)

박성현·2025년 8월 21일

개발중 학습

목록 보기
19/43

PostgreSQL에서 시퀀스로 Auto Increment 구현하기

개발하다 보면 컬럼 값이 자동으로 증가하도록 하고 싶을 때가 많습니다.
MySQL에서는 AUTO_INCREMENT 키워드 하나로 쉽게 해결되지만, PostgreSQL은 조금 다른 방식을 씁니다.

PostgreSQL에서는 시퀀스(Sequence) 라는 객체를 만들어서 컬럼에 연결해주면 자동 증가를 구현할 수 있습니다.
이번 글에서는 제가 실제로 적용했던 과정을 기록해둡니다.


1. 시퀀스 만들기

먼저 시퀀스를 하나 만들어야 합니다. 저는 0부터 시작해서 1씩 증가하도록 세팅했습니다.

CREATE SEQUENCE my_table_id_seq
    INCREMENT BY 1
    MINVALUE 0
    MAXVALUE 9223372036854775807
    START 0
    CACHE 1
    NO CYCLE;

여기서 옵션은 간단히 요약하면:

  • INCREMENT BY 1 → 1씩 증가
  • MINVALUE 0 / START 0 → 0부터 시작
  • MAXVALUE → BIGINT의 최대값까지 사용 가능
  • NO CYCLE → 최대값 도달하면 다시 0으로 안 돌려줌

2. 컬럼에 시퀀스 연결하기

  • 이제 이 시퀀스를 테이블의 id 컬럼에 붙여줍니다.
  • nextval 함수는 postgre에서 제공하는 함수로 시퀀스의 값을 증가시킬때 사용하는 기능입니다.
ALTER TABLE my_table
ALTER COLUMN id SET DEFAULT nextval('my_table_id_seq'::regclass);

이렇게 하면 INSERT 할 때 id를 생략하면 자동으로 증가된 값이 들어갑니다.


3. 시퀀스를 컬럼에 종속시키기 (권장)

추가로 아래처럼 소유권을 연결해두면 관리가 편합니다.

ALTER SEQUENCE my_table_id_seq
OWNED BY my_table.id;

이렇게 해두면 테이블을 삭제할 때 관련 시퀀스도 같이 정리됩니다.


4. 기존 데이터가 있다면?

이미 데이터가 들어있는 경우, 시퀀스가 현재 최대값 이후부터 증가하도록 맞춰줘야 합니다.

SELECT setval('my_table_id_seq', COALESCE((SELECT MAX(id) FROM my_table), 0) + 1, false);

예를 들어 id가 이미 5까지 들어있다면, 다음 insert부터는 6부터 시작합니다.


5. 실제로 테스트해보기

이제 실제로 데이터를 넣어봅니다.

INSERT INTO my_table (name, description)
VALUES ('첫 번째 데이터', '테스트1');

INSERT INTO my_table (name, description)
VALUES ('두 번째 데이터', '테스트2');

조회해보면 👇

SELECT id, name FROM my_table;
idname
0첫 번째 데이터
1두 번째 데이터

자동 증가가 잘 동작하는 걸 확인할 수 있습니다 ✅


6. 마무리

MySQL에서 AUTO_INCREMENT를 쓰던 분들이라면 PostgreSQL에서 시퀀스가 조금 낯설 수 있습니다.
하지만 한번 써보면 훨씬 유연하게 제어할 수 있어서 상황에 따라 더 유용합니다.

  • 새 테이블이라면 → GENERATED AS IDENTITY 쓰는 게 제일 간단
  • 기존 테이블이라면 → 직접 시퀀스를 만들고 컬럼에 연결하는 게 깔끔

저는 이번에 기존 테이블에 적용하면서 시퀀스를 활용했는데, 덕분에 MySQL보다 세세하게 컨트롤할 수 있다는 걸 알게 되었습니다. 😎


profile
개발기록장

0개의 댓글