본문 바로가기

취미, 관심/NAS, Server

Docker PostgreSQL 버전업데이트 후 에러

docker를 사용하면서 watchtower를 함께 사용하고 있는 경우에 별 생각없이 설정해두면 메이저 버전 업데이트를 하면서 문제가 생기는 경우가 있습니다.

 

저는 wiki.js 를 돌리던 중, wiki.js의 로그에서는 postgresql의 업데이트로 인해 DB 연결이 안된다는 오류를 계속해서 내놓고 있던 상황이었구요.

DB에서는 아래와 같은 오류가 나오고 있었습니다.

FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 15, which is not compatible with this version 16.1 (Debian 16.1-1.pgdg120+1).

작년에 생성한 컨테이너였으니 아마 postgresql 버전은 15였을겁니다. 16으로 업데이트가 되어있었어요.

어.. 대충 데이터 디렉토리를 16에 맞게 호환성 해결하라는 것 같은데.. 일단 전 잘 모르니까, 15로 돌려둡니다.

 

저는 docker-compose를 사용하고 있어서 기존 image를 latest로 받아두던것을 15로 고정해줬습니다.

15 최신버전으로 다시 띄워보니 아래 오류가 나옵니다.

The database was created using collation version 2.35, but the operating system provides version 2.36

대충 2.36에 맞추라는 듯 합니다.

 

오류로 검색해보니 몇가지 팁이 나오는데, 그대로 적용해서 되진 않았고.. 몇가지 조합해서 나름대로 해결은 했어서 기록차 남겨둡니다.

# docker exec 를 사용해 컨테이너 접속
docker exec -it {CONTAINER_NAME} bash

# postgres user로 변경, root에서는 postgres 연결이 되지 않음
su postgres

# db접속
psql --username {USERNAME} --dbname {DBNAME}

# 이 방법은 되지는 않았으나 기록차 남겨둡니다 // PostgreSQL 접속
sudo -u postgres psql
# 

# DB 목록을 불러오기
\l

# 사용중인 DB & postgres 재정렬
ALTER DATABASE {DB이름} REFRESH COLLATION VERSION;
ALTER DATABASE postgres REFRESH COLLATION VERSION;

# 종료
\q or exit

# 컨테이너 재시작

16으로 변경하는건.. 검색해봤는데 시간이 좀 걸릴(?) 것 같아서 포기했습니다;;