PSQL 오류 해결: 서버에 연결할 수 없습니다.

4139 단어 postgres
저는 최근 개방형 연구 및 혁신 연구소를 분산시키는 오픈 소스 비영리 단체인 Kori Roys에 기여하는 수석 개발자인 JOGL과 짝을 이루기 시작했습니다. 우리는 백엔드와 프런트엔드의 복제본을 내 컴퓨터로 가져오는 작업을 해왔기 때문에 그와 짝을 이루고 풀 리퀘스트를 만들기 위해 액세스 권한을 가지고 운전할 수 있습니다. 설치 지침에 따라 개발 데이터베이스에 액세스할 수 있도록 postgres 사용자를 만들려고 할 때 문제가 발생했습니다.

Error: 
     psql: 
     error: could not connect to server: 
     No such file or directory 
     Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"


Postgres 서버가 잘못 종료되거나 Postgres가 업그레이드된 경우 발생하는 매우 일반적인 문제입니다. 다음 명령을 사용하여 사람들이 이stackoverflow와 같이 pid를 제거하는 여러 해결 방법을 보았습니다.
$ rm /usr/local/var/postgres/postmaster.pid
$ brew services restart postgresql

나는 pid가 실제로 무엇인지 궁금했기 때문에 사실 이후에 약간의 조사를 수행했습니다. Postgres 문서를 읽으면서 데이터 디렉토리에 있는 postmaster.pid 파일의 존재가 pg_ctl이 서버가 현재 실행 중인지 여부를 결정하는 데 사용된다는 사실을 알게 되었습니다. pg_ctl은 PostgreSQL 백엔드 서버(postmaster)를 시작, 중지 또는 다시 시작하거나 실행 중인 서버의 상태를 표시하는 유틸리티입니다.

동일한 오류를 가진 많은 이전 사용자가 수행한 작업에 따라 위에 표시된 위치에서 postmaster.pid를 검색했습니다. 그러나 pid는 없었습니다. 내가 본 가장 가까운 곳은/usr/local/var/postgres/postmaster.opts였으며 어디에서도 pid를 찾을 수 없었습니다.

Senior Dev는 자신의 경험을 바탕으로 postgres 로그를 확인하여 후드 아래에서 실제로 무슨 일이 일어나고 있는지 확인하도록 제안했습니다.
$ tail -f -n 100 /usr/local/var/log/postgres.log
이것은 우리에게 postgres의 가장 최근 100개 로그를 제공했으며 내 PostgresSQL 데이터베이스와 버전이 호환되지 않는 것을 확인했습니다.
2021-02-17 16:13:50.885 CST [12699] FATAL: database files are incompatible with server
2021-02-17 16:13:50.885 CST [12699] DETAIL: The data directory was initialized by PostgreSQL version 12, which is not compatible with this version 13.2.

먼저 PostgreSQL 버전을 12로 변경하려고 시도했지만 여전히 동일한 오류가 발생했으며 pid를 찾을 수 없었습니다. 그래서 버전 13.2로 되돌리고 대신 데이터베이스를 업그레이드했습니다.
$ brew postgresql-upgrade-database
그런 다음 Postgres를 몇 번 시작하고 중지한 후 다음을 사용합니다.
$ brew services stop postgres
$ brew services start postgres

그리고 로그 확인
$ tail -f -n 100 /usr/local/var/log/postgres.log
드디어 새로운 오류가 발생했습니다!
2021-02-17 16:22:37.524 CST [17926] HINT: Is another postmaster (PID 17890) running in data directory "/usr/local/var/postgres"?
2021-02-17 16:22:47.547 CST [18050] FATAL: lock file "postmaster.pid" already exists

이는 우리가 postgres 폴더의 파일을 확인했을 때를 의미했습니다.

우리가 제거할 수 있는 pid가 있었습니다! 우리는 다음을 사용했습니다.
$ rm postmaster.pid
$ brew services stop postgres
$ brew services start postgres

그런 다음 postgres를 성공적으로 사용할 수 있었고 로그에서 다음을 확인했습니다.
2021-02-17 16:25:04.453 CST [19214] LOG: listening on IPv6 address "::1", port 5432
2021-02-17 16:25:04.453 CST [19214] LOG: listening on IPv4 address "127.0.0.1", port 5432
2021-02-17 16:25:04.454 CST [19214] LOG: listening on Unix socket "/tmp/.s.PGSQL.5432"
그리고 우리는 계속해서 JOGL 설치 지침을 따르고 데이터베이스에 대한 postgres 사용자를 생성할 수 있었습니다.

빠른 팁

이 문제 해결 경험 후 며칠 동안 이 게시물을 작성할 때 수석 개발자에게 그가 postgres 로그에 액세스하는 데 사용한 명령이 무엇인지 물어봐야 했습니다. 친절하게 보여주셨지만 실행한 명령을 기억하려고 할 때 사용할 수 있는 또 다른 요령도 가르쳐 주셨습니다. $history [옵션]을 입력하고 옵션에 보려는 줄 수를 제공할 수 있습니다. 이런 식으로 문제를 해결하는 동안 수행한 모든 단계를 따를 수 있었습니다.
$ history 100


이 이미지는 문제를 해결하기 위해 수행한 모든 단계를 요약한 것입니다. 그리고 이것을 통과하기 위해 두 개의 다른 세션이 필요했습니다.

교훈: 로그는 오류가 문제를 해결하기에 충분하지 않을 때 매우 유용할 수 있습니다.

즐거운 코딩하세요!

좋은 웹페이지 즐겨찾기