PostgreSQL, "/tmp/.s.PGSQL.5432" failed 오류 일대기 [Mac]

조오닭·2024년 2월 6일
4
post-thumbnail

개요

  • 기존 django 프로젝트를 다른 컴퓨터로 옮길 일이 있었는데, localhost db를 재설정해줘야 했다. 그때 이제 끊임없이 문제가 생기는데...
  • 사실 아직까지도 왜 오류가 생기고, 왜 안생기는 지 잘... 너무 한끝 차이라 해결하고도 어이가 없다.
  • 이 게시물은 Mac 기준으로 명령어가 작성되어 있다.

1. 내 환경은 어땠냐면...

% brew install postgresql
% brew services start postgresql
% psql postgres
% psql --username=postgres --dbname=postgres

맥 command에서 brew를 통해 postgres를 다운 받고 실행시킨 뒤, psql 명령어를 통해 DB에 진입할 수 있는 명령어다. (맨 아래 명령어는 왜 했는지 모르겠으나 다른 오류때문에 기입한 것으로 추정...)
문제는... 여기까지는 가능하지만 db를 만들 때 아래의 오류가 발생했다.

psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL:  role "postgres" does not exist

에러의 늪

위의 오류가 뜬 뒤 다시 psql로 진입하려고 했으나...

% psql
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL:  database "chodakk" does not exist

??? 분명 되던 psql이 갑자기 오류를 뱉어낸다. 퉤.
따라서 구글링해보니 다~들 다음과 같은 방법으로 서비스를 재시작하라고 했다.

% brew services restart postgresql@14
Stopping `postgresql@14`... (might take a while)
==> Successfully stopped `postgresql@14` (label: homebrew.mxcl.postgresql@14)
==> Successfully started `postgresql@14` (label: homebrew.mxcl.postgresql@14)

음 문제없이 실행되고 산뜻하다.

하지만...

% psql
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL:  database "chodakk" does not exist

ㅋㅋㅋ 도돌이표였다


2. 인터넷이 하라는 대로 했어요. 근데...

나와 같은 오류를 뱉어내는 사람들이 많았다.
자료는 많은데 m1 맥북(내 꺼임)이냐 아니냐에 따라 코드가 다르고... 총체적 난국이다.

시도 1

% cd /Applications/PostgreSQL 14/Application Stack Builder.app
cd: too many arguments

무지성으로 복붙했는데 생각해보니 경로 사이에 띄어쓰기 무엇.
그래서 일단 해당 파일이 있는 지부터 봤다.
...없다? 이게 뭐여

시도 2

pgAdmin에서는 db를 만들 때 자꾸 postgres role이 없다고 하길래 이부터 해결하고자 해당 명령어를 기입하였다.

% createuser -s postgres
% psql
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL:  database "chodakk" does not exist

command에서도 db chodakk이 없다면서 오류를 내고, pgAdmin에서는 postgres role 오류 어쩌구는 들어갔지만 저 오류를 다시 뱉어냈다. 퉤.

시도 3

다른 방법을 구글링하니 postmaster.pid 파일을 삭제하라 했ㄷ ㅏ...

1. 실행했던 postgres를 멈추게 한다.

% brew services stop postgresql
Stopping `postgresql@14`... (might take a while)
==> Successfully stopped `postgresql@14` (label: homebrew.mxcl.postgresql@14)

2. postmaster.pid 파일 삭제

% rm /usr/local/var/postgres/postmaster.pid
rm: /usr/local/var/postgres/postmaster.pid: No such file or directory

저 파일 그냥 없어 ㅋㅋ
파인더를 통해서도 해당 폴더가 있는 지부터 봤는데 없어요. 아니 없어요. 그냥 없어요.

시도 4

근본으로 돌아가... (해당 글에서 설명을 안했지만) django의 5432 포트가 안된다는 오류를 고치러 초심으로 돌아가 구글링 했더니, postgresql.conf 파일에서 포트를 좀 만져주면 된다고 했다...

% sudo vi /usr/local/var/postgres/postgresql.conf

결과 : 빈파일 ㅋㅋ (해당 파일이 없다는 뜻이다.)

시도 5

스택 오버플로우에선 m1 (그 이상도 해당할 듯) 노트북 유저는 이렇게 해야한다고 했다.

% rm /opt/homebrew/var/postgres/postmaster.pid
rm: /opt/homebrew/var/postgres/postmaster.pid: No such file or directory

결과 : 지울 파일(폴더)이 없어요

킹받아서 폴더가 있는 지부터 차례로 점검했다.

% cd /opt
/opt % cd homebrew

homebrew % ls
CHANGELOG.md	Frameworks	completions	manpages	var
CONTRIBUTING.md	LICENSE.txt	docs		opt
Caskroom	Library		etc		package
Cellar		README.md	include		sbin
Dockerfile	bin		lib		share

homebrew % cd var

var % ls
homebrew	log		postgresql@14	postgresql@15
  1. /opt/ : homebrew 있음
  2. /opt/homebrew/ : var 있음
  3. /opt/homebrew/var/ : postgresql 폴더 없음~~
    -> 내가 무지성 설치하는 바람에 postgresql 버전이 @14 @15 이 두 개로 폴더가 분리되어 있었음을 확인했다...

따라서 brew uninstall을 통해 14버전과 15버전 모두 삭제하고 /opt/homebrew/var에서 두 폴더까지 삭제 후 재설치하기로 했다.


3. 초심으로 돌아가 삭제 후 설치

1. postgresql을 멈추게 한다.

% brew services stop postgresql
Stopping `postgresql@14`... (might take a while)
==> Successfully stopped `postgresql@14` (label: homebrew.mxcl.postgresql@14)

2. postgres를 삭제한다. [알고보니 나는 14버전만 있었다. 15는 파일만 남아있나 봄]

% brew uninstall --force postgresql@14
Uninstalling postgresql@14... (3,317 files, 46MB)
% brew uninstall --force postgresql@15
% brew cleanup

3. /opt/homebrew/var/ 로 이동 후 파일 삭제

% cd /opt/homebrew/var
% rm -rf postgresql@14
% rm -rf postgresql@15

4. postgresql@14 재설치 후 db 생성
[필수] : 뒤에 @14를 붙여야 한다. (15버전은 @15겠죠?!)

% brew install postgresql@14
% brew services start postgresql@14

5. db 생성 및 psql 진입

% createdb chodakk  
% psql
psql (14.10 (Homebrew))
Type "help" for help.

chodakk=#

6. 혹시 몰라 postmaster.pid 파일도 삭제

% cd /opt/homebrew/var/postgresql@14

% ls
PG_VERSION		pg_multixact	pg_tblspc
base			pg_notify		pg_twophase
global			pg_replslot		pg_wal
pg_commit_ts	pg_serial		pg_xact
pg_dynshmem		pg_snapshots	postgresql.auto.conf
pg_hba.conf		pg_stat			postgresql.conf
pg_ident.conf	pg_stat_tmp		postmaster.opts
pg_logical		pg_subtrans		postmaster.pid

% rm postmaster.pid

% ls
PG_VERSION		pg_multixact	pg_tblspc
base			pg_notify		pg_twophase
global			pg_replslot		pg_wal
pg_commit_ts	pg_serial		pg_xact
pg_dynshmem		pg_snapshots	postgresql.auto.conf
pg_hba.conf		pg_stat			postgresql.conf
pg_ident.conf	pg_stat_tmp		postmaster.opts
pg_logical		pg_subtrans

7. 하지만 role postgres 오류 발생

% psql --username=postgres --dbname=postgres
psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL:  role "postgres" does not exist

8. role postgres does not exist 오류 해결

% createuser -s postgres
% psql --username=postgres --dbname=postgres
psql (14.10 (Homebrew))
Type "help" for help.

postgres=#

Django에서 과연!!!!

감격의 순간


4. 마무리

윈도우에서 맥으로 옮긴지 얼마 안된 시점에서 디렉토리나 커맨드가 좀 생소하다 보니 우왕좌왕하긴 했다. (한글 폴더명 말고 영어 폴더명으로 보여주세요 파인더님...)
이걸 두 시간 이상 붙잡고 있으면 꼴도 보기 싫기 때문에 에러를 자세하게 보지도 않고 해서 대충 봤는데, 지금 복기해보니까 조금 더 자세히 봤으면 한 시간 정도는 절약하지 않았을까 싶은 것들이 꽤나 있었다.

오류를 다시 정리하면...

% psql
오류 : database "[user명]" does not exist
  1. brew를 통해 postgresql을 삭제 후 재설치 (꼭 뒤에 @버전 붙어야함!)
  2. % brew services start postgresql@14 를 통해 서비스 실행
  3. (m1 기준) /opt/homebrew/var/로 이동해 해당 postgres 파일 내 postmaster.pid 파일 삭제
  4. createdb [user명]
  • psql로 진입할 때 db를 지정 안 해주면, 커맨드 사용자 이름으로 들어가는 것 같음.
% psql --username=postgres --dbname=postgres
오류 : role "postgres" does not exist
  1. % createuser -s postgres 명령어 실행 (postgres 유저를 생성)
  2. 1번을 하고도 명령어를 다시 입력했을 때 오류가 뜬다면 postgresql 삭제 후 재설치
  • username에 postgres가 없어서 생기는 오류.
  • 참고 : 이 때 % psql 을 한다면 자신의 컴퓨터 이름이 postgres가 아닌 이상 user명 db가 없다면서 에러를 뱉어냄

아무튼 나처럼 우왕좌왕하는 누군가에게 조금이라도 도움되는 게시글이면 좋겠다.
스택 오버플로우 보기 싫어싫어^^

profile
백엔드 응애

0개의 댓글

관련 채용 정보