Postgres가 갑자기 안될 때 ( 재설치, 오류 )

marsboy·2023년 6월 26일
0

서버를 이전하기 위해서 어느날 datagrip을 들어가보니 local postgres에 모든 연결이 안되는 에러가 발생했다.

터미널을 통해서 psql 명령어를 실행하니 아래와 같은 에러가 발생한다.

psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
	Is the server running locally and accepting connections on that socket?

어떻게 된 일인가 싶어 그대로 구글링해보니 상당히 많은 레퍼런스가 나왔다. 생각보다 빈번히 발생하는 에러인 것 같아 쉽게 해결할 수 있을 줄 알았으나, 꽤 오래 걸렸고 레퍼런스를 남기기로 한다.

environment

version : postgres@14
package manager : homebrew
computer : MacBook Air M2

solution 1

아래 명령어는 기본적인 해결책이다. 거의 대부분의 사용자들은 아래 CLI를 통해서 해결할 수 있는 것 같았다.

brew uninstall postgresql
brew install postgresql@14
brew services start postgresql@14
brew link postgresql@14 --force

하지만 나는 brew services start postgresl 명령어를 입력하니 아래와 같은 에러가 또 발생했다.

Bootstrap failed: 5: Input/output error
Try re-running the command as root for richer errors.
Error: Failure while executing; `/bin/launchctl bootstrap gui/501 /Users/marsboy/Library/LaunchAgents/homebrew.mxcl.postgresql@14.plist` exited with 5.

solution 2

터미널에 다음 명령어를 입력한다.

# M1이 아닌 경우
rm /usr/local/var/postgres/postmaster.pid
brew services restart postgresql
# M1인 경우
rm /opt/homebrew/var/postgres/postmaster.pid
brew services restart postgresql

postmaster.pid가 손상되어 psql 명령어가 작동하지 않는 경우가 있는 것 같다. 이 파일을 삭제하고 brew services restart postgresql 명령어를 실행시키면 정상 postmaster.pid 파일이 생성되어 제대로 동작한다.

하지만 내 경우에는 여전히 에러가 발생하여 세번째 방법으로 해결하였는데..

solution 3

$HOMEBREW_PREFIX 가 바뀌어서 디렉토리 위치가 바뀐 것 같다. 아래의 명령어를 통해 문제를 해결했다.

initdb --locale=C -E UTF-8 $HOMEBREW_PREFIX/var/postgres
pg_ctl -D $HOMEBREW_PREFIX/var/postgres -l logfile start

위 경우를 살펴보면 M1인지 아닌지에 따라서 경로가 살짝 바뀌는데, M1이 아닌 경우에는 /usr/local/var/ 경로에 postgres 디렉토리가 존재해야 한다.
하지만 내 컴퓨터에서는 해당 경로에서 파일이 없었는데, M1부터는 brew를 통해서 설치된 패키지들이 /opt/homebrew/var/ 내에 존재하게 된다.

처음에 initdb 명령어를 통해서 해결하려고 했었는데, 위와 같이 경로를 직접 지정해주지 않아 initdb 명령어가 제대로 작동하지 않았던 것 같다. 위 명령어를 통해 postgresql 문제를 해결하고 datagrip이 정상 동작한다.

postscript

M2를 사용하는 내 컴퓨터는 /opt/homebrew/var/postgres 내에 postgres 파일들이 존재하는데, postgresql.conf 파일도 여기서 관리한다.

sudo vi postgresql.conf

해당 명령어를 통해서 직접 config를 관리할 수 있기 때문에 위 해결책으로도 안 된다면 이와 같은 방법도 추천한다.

reference

참고 : https://juanitofatas.com/notes/pg
참고 : stackoverflow

profile
티스토리로 마이그레이션됨

0개의 댓글