서버를 이전하기 위해서 어느날 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?
어떻게 된 일인가 싶어 그대로 구글링해보니 상당히 많은 레퍼런스가 나왔다. 생각보다 빈번히 발생하는 에러인 것 같아 쉽게 해결할 수 있을 줄 알았으나, 꽤 오래 걸렸고 레퍼런스를 남기기로 한다.
version : postgres@14
package manager : homebrew
computer : MacBook Air M2
아래 명령어는 기본적인 해결책이다. 거의 대부분의 사용자들은 아래 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.
터미널에 다음 명령어를 입력한다.
# 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 파일이 생성되어 제대로 동작한다.
하지만 내 경우에는 여전히 에러가 발생하여 세번째 방법으로 해결하였는데..
$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이 정상 동작한다.
M2를 사용하는 내 컴퓨터는 /opt/homebrew/var/postgres
내에 postgres 파일들이 존재하는데, postgresql.conf 파일도 여기서 관리한다.
sudo vi postgresql.conf
해당 명령어를 통해서 직접 config를 관리할 수 있기 때문에 위 해결책으로도 안 된다면 이와 같은 방법도 추천한다.