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')
을 사용해서 값을 가져옵니다.
그런데 그거 아시나요?
postgresql
는 serial
타입의 컬럼에 대해서도 Sequence
를 자동으로 생성해줍니다.
그렇다면 serial
도 nextval
을 통해서 값을 읽어올 수 있겠죠?
하지만 문제가 있습니다.
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'));