nextval 동시성 문제가 없을까?

ms-shin·2023년 6월 13일
0

postgresql

목록 보기
1/2

사내 서비스에서 옷 이미지와 특성들을 벌크로 업로드하는 서비스가 있다. 옷 데이터는 clothes라는 테이블과 이미지 url을 담고 있는 url 테이블이 외래키로 연결되어 있다.

이 때, 최대한 적게 세션을 사용하기 위해서는 모든 이미지를 넣고, 그 아이디를 clothes 데이터를 생성할 때, mapping하여 넣어주면 될 것이다.

우리 서비스는 nextval을 통해서 미리 image.id, clothes.id들을 업로드할 옷 갯수만큼 가져와서 mapping해서 bulk로 insert하는 것으로 구현했다.

과연 멀티 세션에서 id는 유니크하게 관리가 되는 것일까? 또는 트랙잭션 실패한 경우 어떻게 되는 것일까?

시퀀스 개체를 다음 값으로 이동하고 해당 값을 반환합니다. 이는 원자적으로 수행됩니다. 여러 세션이 동시에 실행되더라도 nextval 각 세션은 고유한 시퀀스 값을 안전하게 수신합니다.

주의할 내용으로는, concurrent를 보장하기 위해서 트랙잭션 실패시 id를 재사용하지 않는다는 것이다. seq에 gapless를 보장하지 않으니 참고 해야합니다.

https://www.postgresql.org/docs/current/functions-sequence.html

profile
지식을 깊게 파고드는 개발자입니다.

0개의 댓글