ARM(aarch64)에서 기본이 아닌 로케일 환경의 업그레이드
컨테이너 2개 구성의 단일 서버에서 발생한 잘못된 업그레이드를 수정하는 데 시간을 꽤 썼습니다.
- 해당 서버의 CPU가 ARM입니다.
- Discourse가
en_UK.UTF-8로케일로 설정되어 있었습니다.
단계별로 다음과 같은 사실을 파악했습니다:
tianon/postgres-upgrade:13-to-15는 ARM에서 작동하지 않습니다.- 로케일 설정은
share/${CONTAINER}/postgres_data/postgresql.conf에 저장되어 있습니다.
기본 로케일이 사용되도록 확인하기 위해 데이터 컨테이너의 env: 부분을 주석 처리하는 것부터 시작했습니다.
그리고 업그레이드 난국을 타개하기 위해, en_GB와 en_US 사이의 정렬(collation) 차이가 무시할 수 있을 것이라고 가정하고 위험한 조치를 취했습니다. 클러스터 전체를 en_US로 무차별적으로 업데이트했습니다:
UPDATE pg_database SET datctype='en_US.UTF-8', datcollate='en_US.UTF-8';
이 단계가 반드시 필요한지는 확신할 수 없으며, YMMV(결과가 사람마다 다를 수 있음)입니다. 더 전문적인 분들의 의견을 듣고자 여기에 남겨두며, 다른 언어의 경우 이 작업을 전혀 권장하지 않습니다!
이후 postgresql.conf의 로케일을 교체했습니다:
sed -i -e 's/en_GB/en_US/g' shared/data/postgres_data/postgresql.conf
sudo -H -u discourse ./launcher rebuild data
...
UPGRADE OF POSTGRES COMPLETE
![]()
쉬운 과정은 아니었습니다: 특히 제가 개입했을 당시 관리자 인터페이스가 사용 불가능했고, 마지막 백업은 6일 전에 이루어진 상태였습니다. 적절한 – 혹은 적어도 작동하는 – 해결책에 도달하기 전에 이것저것 시도해봐야 했습니다. 옵션을 탐색하는 긴 과정을 언급하지 않았습니다.
이 글이 몇몇 분들의 시간을 절약해 주기를 바랍니다.