사내 서비스에서 옷 이미지와 특성들을 벌크로 업로드하는 서비스가 있다. 옷 데이터는 clothes
라는 테이블과 이미지 url을 담고 있는 url 테이블이 외래키로 연결되어 있다.
이 때, 최대한 적게 세션을 사용하기 위해서는 모든 이미지를 넣고, 그 아이디를 clothes 데이터를 생성할 때, mapping하여 넣어주면 될 것이다.
우리 서비스는 nextval을 통해서 미리 image.id, clothes.id들을 업로드할 옷 갯수만큼 가져와서 mapping해서 bulk로 insert하는 것으로 구현했다.
시퀀스 개체를 다음 값으로 이동하고 해당 값을 반환합니다. 이는 원자적으로 수행됩니다. 여러 세션이 동시에 실행되더라도 nextval 각 세션은 고유한 시퀀스 값을 안전하게 수신합니다.
주의할 내용으로는, concurrent를 보장하기 위해서 트랙잭션 실패시 id를 재사용하지 않는다는 것이다. seq에 gapless를 보장하지 않으니 참고 해야합니다.
https://www.postgresql.org/docs/current/functions-sequence.html