현재 프로젝트에서 게시물을 묶어 하나의 시리즈로 만드는 기능을 개발하고 있었다.
시리즈는 순서가 중요하기 때문에, 어떤 형태로든 시리즈에 들어간 게시물들의 순서를 DB 에 저장할 필요가 있겠다고 생각했다.
psql 에서 update 문은 데이터의 접근 순서를 보장할 수 없으므로 update를 여러 번 수행하는 것이 정확함
update 된 시간이 너무 빨라서 같은 시간으로 찍히면 어떡하지? => 실행해본 결과 실제로 timestamp 가 동일하게 찍힌다.
update 를 실행하면서 실행한 순서를 저장하면 된다.
for문으로 돌면서 index 값을 저장하기
psql sequence 사용하기
시퀀스 조작
START: 몇부터 시작할 지 / 생성
RESTART: 현재 사용중인 시퀀스를 몇부터 시작할 지 / 수정
DROP: / 삭제
이 외에도 increment 설정, min, max value 설정 등 다양한 설정이 가능함
사용
nextval(seq_name): 현재 값을 반환하고 값을 +1 함
currval(seq_name): 최근 nextval 에서 반환한 값을 반환함 (현재 세션에서 nextval 을 사용하지 않으면 에러)
setval(seq_name, value): 값을 value 로 설정함
생성하기
CREATE SEQUENCE post.memo_series_order_seq START 1;
사용하기
UPDATE table
SET series_id = ?, series_order = nextval('post.memo_series_order_seq'::regclass)
WHERE id = ?;