Postgresql은 자동 증가 컬럼을 위해 시퀀스를 사용한다.
Postgresql에서 시퀀스는 아래의 쿼리를 통해 확인할 수 있다.
- nextval: 시퀀스 값을 1 증가시키고 증가시킨 값을 반환한다.
- currval: 현재 세션에서 마지막으로 호출했던 nextval의 값을 반환한다.
- last_value: 현재 세션에서 마지막으로 반환된 nextval 값을 반환한다.
SELECT nextval(item_id_seq);
SELECT currval(item_id_seq);
SELECT last_value FROM item_id_seq;
개발하다보면 직접 데이터를 넣어주는 경우가 있는데, 이 경우 시퀀스도 업데이트해주지 않으면 이미 수동으로 넣은 데이터와 sequence가 겹치게 되므로 duplicate key 에러가 발생하게 된다.
그러므로 시퀀스도 꼭 갱신해주자. 아래와 같은 방법으로 갱신할 수 있다.
1. ALTER문 사용
2. setval 함수 사용
- 세번째 인자값이 True인 경우 setval 이후의 nextval은 그 다음 값을 반환하고 False이면 그 값 그대로 반환한다.
ALTER SEQUENCE item_id_seq restart with 377;
SELECT setval('item_id_seq', 50) -- nextval 51
SELECT setval('item_id_seq', 50, false) -- nextval 50
참고
9.17. Sequence Manipulation Functions
9.17. Sequence Manipulation Functions # This section describes functions for operating on sequence objects, also called sequence generators or just sequences. …
www.postgresql.org
- https://dunchi.tistory.com/60
[PostgreSQL] Sequence란?
Sequence란 유일한 값을 생성하게 도와주는 객체이다. 주로 ID와 같이 순차적으로 증가하는 컬럼에 많이 사용한다. Sequence는 테이블과는 독립적으로 저장되고 생성되기 때문에 여러 테이블에서 참
dunchi.tistory.com
'데이터베이스' 카테고리의 다른 글
[DB] 인덱스의 수직적 탐색과 수평적 탐색 (0) | 2024.10.22 |
---|---|
[postgresql] postgresql의 Index Only Scan (3) | 2024.07.01 |
Datagrip에서 pg_dump로 export하기 (2) | 2024.03.14 |