[PostgreSQL] serial 값을 nextval 로 조회하는 법

식빵·2023년 5월 14일
0

postgresql-memo

목록 보기
18/34
post-thumbnail

TLDR

pg_get_serial_sequence ( table text, column text ) 을 사용하면 됩니다.

select nextval(
	pg_get_serial_sequence('schema_name.table_name', 'serial_column_name')
);

참고: https://www.postgresql.org/docs/current/functions-info.html



설명

일반적으로 저희는 Sequence 를 생성하고 나서, 필요할 때마다 nextval('sequence_name') 을 사용해서 값을 가져옵니다.

그런데 그거 아시나요?

postgresqlserial 타입의 컬럼에 대해서도 Sequence를 자동으로 생성해줍니다.
그렇다면 serialnextval 을 통해서 값을 읽어올 수 있겠죠?

하지만 문제가 있습니다.

nextval 을 사용하려면 시퀀스의 명칭 을 알아야 합니다.
Create Sequence 명령어를 사용하여 시퀀스를 생성하면 시퀀스의 명칭 을 알 수 있지만,
serial 처럼 자동 생성된 시퀀스의 명칭은 알 수가 없습니다!
그러니 일반적인 시퀀스처럼 nextval 로 serial 의 시퀀스 값을 읽을 순 없습니다.

이때 필요한 게 바로 pg_get_serial_sequence 함수입니다!


사용 예제

가볍게 실습을 해보고 싶으시면 아래 예시를 참고해주시기 바랍니다.

-- 샘플 테이블 생성
create table public.test_table
(
    id   serial
        constraint test_table_pk
            primary key,
    name varchar(20) not null
);


-- 샘플 데이터 입력
insert into public.test_table(id, name)
values (default, 'daily'), -- 시퀀스 값 1 사용
(default, 'code'); -- 시퀀스 값 2 사용


-- 이 상태에서 serial 의 다음 값을 호출해봅니다. 3 이 출력될 겁니다.
select nextval(pg_get_serial_sequence('public.test_table', 'id'));
profile
백엔드를 계속 배우고 있는 개발자입니다 😊

0개의 댓글