2024. 12. 2. 11:55ㆍ개발 문서/PostgreSQL
PostgreSQL에서 시퀀스 관리 및 활용 가이드
PostgreSQL은 시퀀스(sequence)라는 객체를 통해 고유한 숫자 값을 생성합니다. 일반적으로 기본 키의 자동 증가(auto-increment)를 구현하거나 특정한 고유 값 생성 로직에서 활용됩니다. 이 글에서는 PostgreSQL에서 시퀀스를 조회하고, 설정하고, 활용하는 방법을 정리합니다.
1. PostgreSQL의 시퀀스란?
시퀀스는 숫자 생성기를 제공하는 PostgreSQL의 객체로, 데이터베이스 내에서 고유하고 연속적인 숫자 값을 생성합니다. 시퀀스는 주로 테이블의 자동 증가 기본 키(Auto Increment Primary Key)에 사용됩니다.
시퀀스 주요 특징
- 특정 규칙에 따라 고유한 숫자를 생성
- 기본 키나 사용자 정의 식별자 생성에 사용
NEXTVAL
,CURRVAL
,SETVAL
과 같은 함수로 제어 가능
2. PostgreSQL에서 시퀀스 조회하기
PostgreSQL 10 이상에서는 시스템 뷰 pg_sequences
를 활용하여 데이터베이스의 시퀀스를 쉽게 조회할 수 있습니다.
시퀀스 목록 조회
SELECT schemaname, sequencename
FROM pg_sequences;
설명:
schemaname
: 시퀀스가 속한 스키마 이름sequencename
: 시퀀스 이름
특정 스키마 내의 시퀀스 조회
SELECT schemaname, sequencename
FROM pg_sequences
WHERE schemaname = 'public';
3. 시퀀스 값 초기화 또는 재설정하기
기본 키 값에 맞춰 시퀀스 값 설정
데이터를 복구하거나 기본 키 값이 변경된 경우, 시퀀스 값을 테이블 데이터의 최대 값에 맞춰 조정해야 할 수 있습니다. 이를 위해 SETVAL
함수를 사용할 수 있습니다.
시퀀스 값 설정 SQL
SELECT setval('sequencename', (SELECT MAX(id) FROM table_name) + 1, true);
예제:
SELECT setval('user_id_seq', (SELECT MAX(id) FROM users) + 1, true);
설명:
sequencename
: 시퀀스 이름MAX(id)
: 테이블의 현재 최대 값+ 1
: 다음 값이 최대값보다 1 크게 설정true
: 호출 후 시퀀스의 다음 값을 강제로 증가시킴
4. 시퀀스와 관련된 함수
1) NEXTVAL
시퀀스의 다음 값을 가져오고 내부적으로 값을 증가시킵니다.
SELECT nextval('sequencename');
2) CURRVAL
현재 시퀀스 값을 반환합니다. 단, 동일 세션에서 NEXTVAL
을 호출한 후에만 사용할 수 있습니다.
SELECT currval('sequencename');
3) SETVAL
시퀀스의 현재 값을 설정합니다.
SELECT setval('sequencename', new_value, is_called);
new_value
: 설정할 값is_called
:true
이면 호출 후 값이 증가합니다.
5. 자동 증가 기본 키에서 시퀀스 활용
PostgreSQL의 자동 증가 필드는 내부적으로 시퀀스를 활용합니다. 예를 들어, 아래와 같은 테이블을 생성하면:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);
PostgreSQL은 내부적으로 users_id_seq
라는 이름의 시퀀스를 생성합니다. 이 시퀀스는 id
열의 값 생성을 제어합니다.
6. 시퀀스 관리 베스트 프랙티스
- 시퀀스 초기화
데이터를 새로 복구하거나 테이블 데이터를 변경한 후에는 반드시 시퀀스를 테이블의 최대값에 맞춰 재설정해야 합니다. - 시퀀스 정리
사용하지 않는 시퀀스는 정리하거나 삭제하여 데이터베이스 관리를 간소화합니다. DROP SEQUENCE IF EXISTS sequencename;
- 백업 및 복원
시퀀스는 일반 테이블처럼 백업되므로, 백업 복원 시 시퀀스 값도 자동으로 복원됩니다. 하지만 데이터 복구 후 값을 수동으로 재설정해야 할 수 있습니다.
7. 시퀀스 활용 시 주의사항
- 동시성 문제: 여러 트랜잭션이 동시에
NEXTVAL
을 호출하면 시퀀스 값이 빠르게 증가할 수 있습니다. - 간격 조정: 기본적으로 시퀀스 값은 1씩 증가하지만, 필요에 따라
INCREMENT BY
옵션으로 간격을 조정할 수 있습니다.
ALTER SEQUENCE sequencename INCREMENT BY 5;
마무리
PostgreSQL의 시퀀스는 고유 숫자 생성이라는 중요한 역할을 담당하며, 데이터베이스 관리와 애플리케이션 개발에 있어 필수적인 도구입니다. 시퀀스를 적절히 설정하고 관리하면 데이터 무결성을 유지하면서 효율적인 고유 ID 생성이 가능합니다.
'개발 문서 > PostgreSQL' 카테고리의 다른 글
PostgreSQL TableSpace 설정하기 (0) | 2025.02.21 |
---|