0. 작성 계기
회사에서 postgresql을 사용하여 프로젝트를 진행하고 있다. 데이터를 넣는 과정에서 pk값을 수정하여 넣는 작업이 필요했다. 데이터를 수정하여 넣고, 기존 기능을 활용하여 데이터를 넣어야 하는데 pk값 중복이 발생하면서 정상 작동하지 않는 버그가 발생했다. 이유를 찾아본 결과, postgresql은 sequences 오브젝트를 활용하여 pk를 만들고 sequences를 하나 올림으로서 pk의 순서를 관리한다. 하지만 나는 sequences 오브젝트를 사용하지 않고 임의로 max +1 방식으로 pk값을 넣어줌으로서 sequences 오브젝트와의 충돌이 일어난 것이 문제였다. 기존에 사용하던 mysql은 auto_incerement 방식을 사용하여 위와 같은 문제가 발생하지 않지만, oracle과 postgresql은 sequences 오브젝트를 꼭! 활용해야한다.
1. sequences 오브젝트의 이점
그래서 sequences 오브젝트를 사용하지 않으면 다음과 같은 이점이 있다.
- 중복 키 값 예방 : 기본 키 값을 수동으로 할당하는 경우 각 값이 고유한지 확인해야 한다. 그렇게 하지 않으면 중복 키 값 오류가 발생하여 데이터를 삽입할 수 없다. Postgresql에서는 sequences 오브젝트를 활용해 효율적으로 관리할 수 있다.
- 유지 관리 및 확장성: sequences 오브젝트를 활용하므로써 mysql과 같이 int, bigint 형 뿐만 아니라 varchar로 pk값을 만들 수 있다. 또한 하나의 테이블에 여러개의 pk값을 만들 수 있다. 예를 들어보면 앞글자에 따라 sequences 오브젝트를 만들어 T0001, C0001, CS0001 등 여러개의 PK값을 만들 수 있다.
- 성능: sequences 오브젝트를 사용하여 기본 키 값을 생성하는 것이 수동으로 값을 할당하는 것보다 성능이 더 좋을 수 있습니다. 특히 테이블에 많은 양의 삽입이 있는 경우 더욱 그렇습니다. 이는 sequences가 데이터베이스에서 관리되고 고유한 값을 빠르고 효율적으로 생성하도록 최적화되기 때문입니다.
- 휴먼 에러 최소화 : 사용자의 실수로 똑같은 pk를 만드는 것을 예방할 수 있다.
'데이터베이스' 카테고리의 다른 글
데이터베이스 실행 계획, 옵티마이저와 쿼리 최적화 실습 ( feat. mantech ) (1) | 2023.05.04 |
---|---|
Delete vs Truncate (0) | 2023.04.26 |
MySQL과 Postgresql의 차이 (1) | 2023.02.20 |
LSM Tree ( Log Structured Merge Tree ) (0) | 2023.01.29 |
DBA 면접 질문 (2) 21 ~ 40 (0) | 2023.01.19 |