KSCOLD LogoKSCOLD
Blog
Feed
Product
Admin Night
Vault
Guestbook
Info

Vault 목록

시퀀스(Sequence)

연결된 노트와 함께 읽기

시퀀스(Sequence)

2026년 5월 17일
  • 시퀀스(Sequence)는 PostgreSQL에서 순차적으로 증가하는 고유 숫자를 생성하는 데이터베이스 객체이다.
  • MySQL의 AUTO_INCREMENT와 같은 역할을 하지만, 테이블과 독립된 별도 객체로 존재한다.
  • SERIAL / BIGSERIAL 컬럼 타입을 사용하면 내부적으로 시퀀스가 자동 생성된다.

SERIAL (단순 사용)

SQL
타입내부 타입범위
SMALLSERIALSMALLINT1 ~ 32,767
SERIALINTEGER1 ~ 2,147,483,647
BIGSERIALBIGINT1 ~ 9,223,372,036,854,775,807

GENERATED AS IDENTITY (권장, PostgreSQL 10+)

SQL
  • SQL 표준 방식으로, SERIAL보다 명시적이고 제어하기 쉽다.

직접 시퀀스 생성

SQL

JPA에서 사용

Java
  • allocationSize = 50: JPA가 한 번에 50개 ID를 미리 확보해 DB 왕복을 줄인다.
  • 대량 삽입이 많은 경우 SEQUENCE 전략 + allocationSize 튜닝이 유리하다.

MySQL AUTO_INCREMENT와 비교

항목MySQL AUTO_INCREMENTPostgreSQL SERIAL/SEQUENCE
선언 방식컬럼 속성별도 객체 (SEQUENCE)
독립성테이블 종속테이블과 독립 가능
공유 가능불가여러 테이블이 공유 가능
재설정ALTER TABLE ... AUTO_INCREMENT=NALTER SEQUENCE ... RESTART WITH N

관련

  • PostgreSQL
  • 기본 키(Primary Key)
  • JPA(Java Persistence API)

Synapse Map Insight

CREATE TABLE posts ( id SERIAL PRIMARY KEY, -- INT + SEQUENCE 자동 생성 big_id BIGSERIAL PRIMARY KEY, -- BIGINT + SEQUENCE 자동 생성 title VARCHAR(200) );
-- GENERATED ALWAYS: 직접 값 삽입 불가 CREATE TABLE posts ( id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY ); -- GENERATED BY DEFAULT: 직접 값 삽입 가능 (마이그레이션 등에 유용) CREATE TABLE posts ( id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY );
CREATE SEQUENCE order_seq START WITH 1000 INCREMENT BY 1 NO MAXVALUE CACHE 10; -- 한 번에 10개씩 미리 생성 (성능 향상) -- 사용 SELECT nextval('order_seq'); SELECT currval('order_seq');
// IDENTITY 전략 (SERIAL/GENERATED ALWAYS AS IDENTITY 사용) @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // SEQUENCE 전략 (시퀀스 객체 직접 사용 - 배치 삽입에 유리) @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "post_seq") @SequenceGenerator(name = "post_seq", sequenceName = "post_id_seq", allocationSize = 50) private Long id;