Programming-[Backend]/SQL

[TIL] SQL sequence로 postgresql primary key sequence 없는 값 insert 하기 : 시퀀스 생성

컴퓨터 탐험가 찰리 2023. 1. 3. 16:11
728x90
반응형

완벽하게 정확한 내용은 아님. 개인 기록용.

혹시라도 참고하시는분은 테스트 디비 등에 주의해서 적용해보시고 진행하시길..

 

 

1. 상황

 

postgresql 테이블에서 sequence가 지정되지 않고 serial로만 지정되어있어서 pk값을 default로 넣을 수가 없는 상황

with tmp as (select a_id, b_id
from ab_table
join b_table b on ab_table.b_id = b.id
where 1 = 1
  and ab.b_id in (복잡한 서브 쿼리)
  
insert into c_table (id, deleted, created, modified, a_id, b_id)
select nextval('c_tabld_id_seq'), null, now(), now(), tmp.a_id, tmp.b_id
from tmp;

 

with 구문을 사용해서 c_table에 넣을 a_id, b_id값들을 테이블로 뽑아내고, 아래 insert into 구문으로 값을 넣을려고 했다.

 

 

2. 적용

개별 시퀀스를 만들고 그 값들을 id값으로 넣는다. nextval을 호출하면 인자로 들어가는 값 다음 + 1 값을 넣어준다.

 

c_table의 최대 id값은 postgresql의 경우 c_table_id_seq 테이블에 저장되어있었다. 따라서 아래와 같이 해당 테이블의 마지막값인 last_value 값을 setval('시퀀스 이름', 시퀀스 초기값)으로 지정해주고 위 insert into 쿼리문을 실행하니 잘 작동하였다.

 

select setval('c_table_id_seq', (select c_table_id_seq.last_value from c_table_id_seq))

 

 

-참조

시퀀스 사용법 : https://mine-it-record.tistory.com/341

728x90
반응형