연휴이후 첫 출근, 한글이름 정렬이 안된다는 오류를 받아서, order by name 을 빼먹었을 리 없다고 생각하면서, 오류를 추적했는데,
- 코드는 당연히
order by가 적용되어 있었고,
결과적으로 문제는 PostgreSQL에서 한글 ORDER BY 정렬 문제 해결하기 COLLATE 이슈와 동일한 현상이었다.
(내부 docker postgre:17.4 와 AWS RDS PostgreSQL 17.2 모두) 기본값 en_US.UTF-8 이 적용되어 있었고, 한글 정렬순서가 올바르게 나오지 않았다.
SELECT datname, datcollate, datctype
FROM pg_database
WHERE datname = current_database();
|datname |datcollate |datctype |
|--------|-----------|-----------|
|postgres|en_US.UTF-8|en_US.UTF-8|
ko_KR.UTF-8 로 새 로케일 지정해서 데이터베이스 새로 만들고, 덤프 백업 & 복원처리를 진행해서 해결은 완료했는데,
간단하게 COLLATE "C" 로도 한글정렬문제를 해결 할 수 있겠다 싶었는데, ChatGPT와 이것저것 논의해본 결과(?) 문자코드순 정렬이라서 사전식 정렬과는 다소 차이가 있어서 완전한 해결책은 아닌 듯 싶다.
(비슷하게나마 해결은 되지만)
데이터베이스를 새롭게 만드는 게 어려우면, 특정 컬럼에만 COLLATE 를 지정해서 변경할 수 있다.
ALTER TABLE 테이블명
ALTER COLUMN 컬럼명 TYPE 데이터타입 COLLATE "C";
서비스가 아직 한국어와 영어만 지원해서, 별다른 고민없이 ko_KR.UTF-8로 처리하기는 했는데, 일본어나 중국어까지 지원하면 결국 Collation을 C 로 해야하는 것은 아닌가 싶은 생각도 들고,
ko_KR.UTF-8에서 일본어,중국어도 다 잘 정렬되지 않을까 싶은 생각도 들고, 혹은 정렬이 중요한 포인트라면 언어별로 컬럼을 파야할 것인가 하는 고민은 있는데, 일단은(?) 나중에 다시 고민하기로 했다.