PostgreSQL에서 databse does not exists 메세지

PostgreSQL에서 databse <user> does not exists 메세지

failed: FATAL: database “<user>” does not exist

오늘 뜬금없이 잘 되던 개발 서버가 에러를 뿜길래 디버그해보니 유저가 존재하지 않는다는 메세지가 출력되고 있었다. 문제는 DB를 건드린 적이 없다는 것이다.
따라서 ASP.NET의 로그 메세지를 보기보다는 직접 DB에 접속해보고자 DataGrip으로 연결을 시도했으나, 여기서도 마찬가지로 에러 메세지가 발생했다.
마지막으로 도커 컨테이너 터미널에서 psql -Uuser -W 로 접속을 시도했으나, 비밀번호 입력 창까지는 뜨고 입력을 완료하면 다음과 같은 에러 메세지가 출력됐다.

psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  database "user" does not exist

음. 갑자기 식은땀이 흐르기 시작했다.

왜 갑자기 멀쩡한 DB가 날아갔는가

일단 원인 파악부터 해봤다. 가장 최근에 DB에 영향을 미칠 만한 짓을 했었던가… 아!
DB에 영향을 끼칠 만한 짓은 안 했지만, DB 컨테이너에 영향을 끼칠 만한 짓은 했었다. 용량을 확보하겠다고 Docker DesktopDisk Usage 확장 기능에서 미사용중인 데이터를 날렸는데, 여기서 사용되지 않는 볼륨도 날렸었다.
아니 근데, 분명 어디에서도 사용되지 않는 볼륨을 날린다고 써져있던 것 같은데 도대체 왜? 설마 하니 DISKPART COMPACT VDISK때문은 아닐 것이고… 가장 가능성 높은 것은 역시 사용되지 않는 볼륨을 날린 것이다.

여기까지 생각이 들고 나니 흐르던 식은땀이 오한으로 바뀌어가는 기분이었다. 설마 DB도 날아갔나 싶은 생각이 들었기 때문이다. 하지만 결론부터 말하자면, 다행히 DB는 멀쩡했다. 어떤 원리인지 모르겠으나 유저만 날아간 것.

세부 증상

세부적인 특이 증상으로는,

  1. 기존에 CREATE USER로 생성한 유저가 전부 날아갔다.
  2. root유저도 날아갔다.
  3. postgres 유저는 멀쩡하다.

즉 디폴트 유저 빼고는 다 날아갔다는 것이다. 그러나 postgres로 로그인하여 확인해보니 DB 데이터는 전부 멀쩡히 존재했다.

해결 방법

구글링해서 찾은 스택오버플로우 글을 보니 생각보다 간단하게 해결할 수 있었다. 그러나 그대로 복붙하니 작동하지 않았고, 유저를 따로 지정해줘야 했다.

createdb -Upostgres # root db 생성
createdb -Upostgres user #user db 생성
createdb -Upostgres user1 # user1 db 생성
# ...

위처럼 하고 로그인해보니 정상 작동한다.

psql -Uuser -hlocalhost

마치며

DB가 통채로 날아간 게 아니라 정말 다행이다. Docker Desktop Disk Usasge Extension 확장 프로그램의 Reclaim Space는 정말로 유용하지만 조심해서 사용해야겠다.

댓글

이 블로그의 인기 게시물

C# 남아도는 메모리에도 불구하고 OutOfMemoryException이 발생한다면?

USB를 뒤는 괜찮은데 앞에 꽂으면 인식이 힘들다?

MySQL 데이터 타입과 Java 데이터 타입 비교/매칭