pg_notify 오류 해결하기**Ubuntu 22.04에서 Docker를 사용해 PostgreSQL 컨테이너를 실행할 때 발생할 수 있는 "pg_notify 디렉터리를 열 수 없습니다" 오류를 해결하는 방법에 대해 알아보겠다.
Ubuntu 22.04 환경에서 Docker로 PostgreSQL 컨테이너를 실행하려고 할 때, 다음과 같은 오류 메시지가 발생했다:
postgres_db | PostgreSQL Database directory appears to contain a database; Skipping initialization
postgres_db | 2024-09-30 11:16:21.613 UTC [1] FATAL: could not open directory "pg_notify": No such file or directory
postgres_db | 2024-09-30 11:16:21.614 UTC [1] LOG: database system is shut down
이 오류는 PostgreSQL이 데이터베이스 디렉터리 안의 특정 디렉터리(pg_notify)를 찾지 못했기 때문에 발생한다. 이 오류는 주로 볼륨 설정 문제나 PostgreSQL 데이터 디렉터리가 손상되었거나, 불완전하게 생성된 경우에 발생한다.
이 오류는 보통 다음과 같은 이유로 발생할 수 있다:
가장 간단한 방법은 데이터 디렉터리를 초기화하고 새로운 데이터 볼륨을 만드는 것이다. Docker에서는 볼륨을 삭제하고 새로 만들 수 있다.
컨테이너 중지 및 볼륨 삭제:
PostgreSQL 데이터를 담고 있는 Docker 볼륨을 삭제하려면 다음 명령어를 실행한다.
docker-compose down
sudo rm -rf ./data/postgres # 데이터 볼륨 경로를 삭제
이 명령어는 기존의 데이터 디렉터리를 완전히 삭제하여 PostgreSQL이 새로운 데이터 디렉터리를 생성하도록 한다.
다시 컨테이너 시작:
이제 다시 컨테이너를 실행하여 PostgreSQL 데이터 디렉터리를 새로 생성한다.
docker-compose up --build
이렇게 하면 새로운 볼륨이 생성되면서 PostgreSQL이 제대로 초기화될 것이다.
볼륨 디렉터리에 대한 접근 권한이 부족한 경우에도 이와 같은 오류가 발생할 수 있다. Docker가 볼륨 경로에 정상적으로 접근할 수 있도록 디렉터리 권한을 설정해야 한다.
볼륨 디렉터리 권한 설정:
PostgreSQL이 데이터를 저장하는 디렉터리에 충분한 권한이 있는지 확인한다. 데이터 디렉터리의 경로는 일반적으로 docker-compose.yml 파일에 설정되어 있다 (./data/postgres 등).
sudo chmod -R 777 ./data/postgres
이 명령어를 통해 Docker가 데이터 볼륨에 대해 읽기 및 쓰기 권한을 가지도록 할 수 있다.