Postgresql 의 limit, offset 으로 페이징 처리할 때 주의할 점
1. 상황 및 문제점
다음과 같은 상황에서 발생한다.
- order by 절에서 사용되는 column 에 중복되는 값이 있다.
다음과 같은 문제가 발생한다.
- 중복되는 값이 여러 페이지에 걸쳐 있는 경우, 같은 값이 여러 페이지에서 나타난다.
2. 해결방안
중복되는 값이 나타나지 않도록 order by 절에 column 을 추가한다.
3. sql
3.1 변경 전 sql
1개의 페이지에 10개의 게시물이 출력된다고 가정하면, 첫 번째 페이지의 sql 은 다음과 같다.
select graha_mail_id, subject, sent_date from webmua.graha_mail order by sent_date desc limit 10 offset 0
2 번째 페이지는 offset 부분만 변경된다.
limit 10 offset 10
3.3 변경 후 sql
order by 절에 Primary 컬럼인 graha_mail_id 를 추가한다.
select graha_mail_id, subject, sent_date from webmua.graha_mail order by sent_date desc, graha_mail_id desc limit 10 offset 0