PostgreSQL 오류 '서버에 연결할 수 없습니다 : 해당 파일 또는 디렉토리가 없습니다'


136

다른 프로젝트와 마찬가지로 프로젝트에서 rake db : migrate를 실행하거나 Ruby on Rails 3.2 애플리케이션 대한 대부분의 데이터베이스 작업을 시도 할 때이 오류가 발생 합니다.

PGError (서버에 연결할 수 없습니다 : 해당 파일 또는 디렉토리가 없습니다. 서버가 로컬로 실행 중이고 Unix 도메인 소켓 "/tmp/.s.PGSQL.5432"에서 연결을 허용합니까?

오래 전에 Homebrew 와 함께 PostgreSQL 을 설치 했으며 MongoDB를 설치 한 후 최근 PostgreSQL 설치가 동일하지 않았습니다. OS X v10.6 Snow Leopard를 실행하고 있습니다.

무엇이 잘못되었고 PostgreSQL이 Mac에서 어떻게 설정되어 있어야하는지 어떻게 더 잘 이해합니까?

지금까지는 PostgreSQL이 실행되고 있지 않다고 생각합니다 (?).

ps -aef|grep postgres                                                                                                   (ruby-1.9.2-p320@jct-ana) (develop) 
  501 17604 11329   0   0:00.00 ttys001    0:00.00 grep postgres

그러나 이것은 PostgreSQL이 실행 중임을 알려줍니까?

 launchctl load -w /usr/local/Cellar/postgresql/9.1.4/homebrew.mxcl.postgresql.plist                                                        (ruby-1.9.2-p136) 
homebrew.mxcl.postgresql: Already loaded

이 문제를 어떻게 해결합니까? 내가 뭘 보지 못합니까?

PS : ~/Library/LaunchAgents두 개의 PostgreSQL .plist 파일이 포함되어 있습니다. 그것이 관련이 있는지 확실하지 않습니다.

org.postgresql.postgres.plist
homebrew.mxcl.postgresql.plist

나는 다음을 시도하고 아래와 같이 결과를 얻었다.

$ psql -p 5432 -h localhost

psql: could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (fe80::1) and accepting
    TCP/IP connections on port 5432?

OS X가 자체 버전의 PostgreSQL을 설치하고 Homebrew가 다른 위치에 다른 버전을 설치하고 PostgreSQL 명령이 / tmp / 디렉토리를 찾고 있기 때문에 이것이 발생했기 때문에 읽었습니다. Stack Overflow에서 더 많은 것을 검색해야하지만 기본적으로 PostgreSQL을 symlink하여 해당 tmp 경로를 찾는 것이 실제로 실제 경로를 찾을 수 있도록하십시오.

이것은 내가 시도 할 몇 가지 더 많은 것을 발견 한 링크입니다. 특히 위의 링크를 수행하면 Mac OSX Lion Postgres는 /tmp/.s.PGSQL.5432의 연결을 허용하지 않습니다 . 나는 여전히 누군가 누군가 OS X에 PostgreSQL을 설치하는 개념과 그것이 왜 그렇게 어려운지에 대해 잘 설명하기를 바랍니다.

문제 해결에 도움이되는 최신 정보 :

$ which psql // This tells you which PostgreSQL you are using when you run $ psql. 

그런 다음 다음을 실행하십시오.

$ echo $PATH

고려해야 할 핵심 사항은 다음과 같습니다.

OS X 시스템의 PostgreSQL에 대한 경로 전에 실행하려는 PostgreSQL 사본의 경로 항목이 COMES인지 확인하십시오.

이것은 어떤 PostgreSQL을 실행할지 결정하는 핵심 요구 사항이며, 내가 들었던 내용은 이러한 문제의 대부분을 초래합니다.


이것에 대한 해결책을 찾은 적이 있습니까? 나는 당신이 하나를 표시하지 않은 것을 참조하십시오. 이 중 어느 것도 나를 도와주지 않습니다.
Andras Gyomrey

그것은 여전히 ​​작동하도록하기 위해 여전히 부두와 이상한 화신입니다. 방금 추가 제안 사항과 편집 주석에 따라 심볼릭 링크를 수행하는 방법이 포함 된 링크와 함께 [편집 2]를 추가했습니다. Symlink는 결국 저에게 도움이되었지만 그 과정에서 postgres와 homebrew를 제거하고 다시 설치했기 때문에 차이점을 정확히 파악하기가 어려웠습니다. 행운을 빕니다. 이 질문에 대한 15,000 조회수로 새로운 것을 발견하면 다시 신고하십시오. 많은 사람들에게 고통을줍니다!
진화

@AndrasGyomrey 방금 호주의 RailsCamp15에서 돌아 왔으며 사람들은 키가 경로 파일을 올바르게 얻는 것이 중요하다고 말했습니다.이를 설명하기 위해 위의 편집 3에서 편집했습니다.
전개

launchctl이로드 된 것으로보고하는 것이 반드시 실행 중임을 의미하지는 않습니다. 대안으로 bigsql.com 을 살펴 봐야합니다 . Mac에서 작동하며 관리 UI가 좋습니다.
Jim Nasby

답변:


102

postgres 디렉토리에 postmaster.pid가 없는지 확인하십시오. /usr/local/var/postgres/

이것을 제거하고 서버를 시작하십시오.

확인 - https://github.com/mperham/lunchy가 launchctl을위한 훌륭한 래퍼입니다.


3
이것은 나를 위해 일했습니다. 방금 요세미티를 새로 설치하고 사제에서 postgres를로드했습니다. 처음 사용할 때 정상적으로 작동했지만 다시 시작한 후에이 문제가 발생했습니다. 왜 이것이 효과가 있었는지 설명 할 수 있습니까?
Dan Williams

2
나를 위해 일하지만, newbs를 들어, 캔 누군가가 왜, 어떻게 안전 이것이 설명
알렉산더 밀스

58

OS X를 사용하는 경우 " Postgres.app "가 더 나은 수정입니다


수정 사항은 다음과 같습니다.

  1. 데이터베이스를 중지
  2. cd /var
  3. rm -r pgsql_socket
  4. ln -s /tmp pgsql_socket
  5. chown _postgres:_postgres pgsql_socket
  6. 컴퓨터가 아닌 PostgreSQL을 다시 시작하십시오.

자세한 내용은 " postgresql 9.0.3. on Lion Dev Preview 1 "에서 확인할 수 있습니다.


2
나를 위해 오류가 다시이 수정은 도움이되지 않았습니다. 나는 실제로 무슨 일이 일어나고 있는지, 그리고 스스로 수정을 적용하는 과정을 이해하기 위해 어두운 방에서 부딪 치는 것처럼 느낍니다. 이 문제를 진단하고 해결할 수있는 방법을 설명해 주시겠습니까?
진화

나를 위해 작동합니다. /tmp_postgres에 숨 이 좀 이상하게 느껴지지만 이봐 :)
wrdevos

postgresapp가 작동하지만 왜 터미널에서 서버를 시작할 수 없습니까? 이 응용 프로그램을 종료 한 후 문제가 예상대로 돌아옵니다.
hakunami

이것은 나를 위해 일했지만 루트 2이거나 sudo를 사용하여 # 2-4를 실행해야합니다. 또한 # 5 단계를 명확히하십시오-컴퓨터가 아닌 postgres 만 다시 시작하면됩니다.
mpelzsherman

2
대문자는 더 나은 답변을하지 않습니다. Homebrew (서비스)를 통해 Postgres를 설치하고 실행하는 것이 여전히
좋습니다

55

나를 위해, 이것은 작동합니다

rm /usr/local/var/postgres/postmaster.pid

9
제 경우에는 pid를 삭제 한 후 다음과 같이 postgresql을 다시 시작해야했습니다.pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Obromios

4
또한 brew services restart postgresql
postbrew

2
No such file or directory내 경우에는 docker env 에 있습니다
Sarz

2
rm : /usr/local/var/postgres/postmaster.pid : 해당 파일 또는 디렉토리 없음
nourza

13

이것은 당신이 언급 한 오류에 대해 나를 위해 일했습니다. 수행 이들의를 :

  1. 설치 중에 postgres.conf기본 포트 이외의 다른 것을 사용한 경우 파일에 지정된 기본 포트를 변경하십시오 5432.

  2. 포트 번호를 변경하고 postgresql.confDB 서버를 다시 시작하십시오.

  3. psql전체 명령 을 입력하는 대신 :

    psql -p 5432 -h localhost   
    • 서버 이름과 포트 번호

1. 설치는 기본값에 따른 것 같습니다.
진화

2. 포트를 변경하면 어떤 영향을 줄 수 있습니까?
진화

3. 위의 3에서 내 출력을 추가했습니다.
진화

옵션 3은 사용자 정의 포트와 함께 작동했습니다. 여러 pg 서버가 설치되어 있기 때문에 (PostgreSQL 9.1, 9.2 및 9.3) 올바른 psql을 가리켜 야했습니다.
gpasse

11

Homebrew를 실행중인 경우 Postgresql end pg gems를 제거하십시오 : *

$ gem uninstall pg
$ brew uninstall postgresql

다음 스크립트를 다운로드하여 실행하여 / usr / local에 대한 권한을 수정 하십시오 . * https://gist.github.com/rpavlik/768518

$ ruby fix_homebrew.rb

그런 다음 Postgres를 다시 설치하고 pg gem을 설치하십시오 : *

$ brew install postgresql  
$ initdb /usr/local/var/postgres -E utf8

로그인 실행시 postgresql 시작을 시작하려면 다음을 수행하십시오.

$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents 

또는 수동으로 시작하십시오.

pg gem 설치

$ gem install pg

도움이 되었기를 바랍니다


보낸 사람 brew info postgres:ARCHFLAGS="-arch x86_64" gem install pg
wrdevos

1
이것이 DB의 레코드를 삭제하지 않습니까?
kibaekr

initdb /usr/local/var/postgres -E utf8공장. 무리 감사.
Chris Jeon

8

Postgres를 9.3.x로 업그레이드했을 때 문제가 발생했습니다. 빠른 수정 방법은 이전에 사용했던 9.2.x 버전으로 다운 그레이드하는 것이 었습니다 (새 버전을 설치할 필요가 없음).

$ ls /usr/local/Cellar/postgresql/
9.2.4
9.3.2
$ brew switch postgresql 9.2.4
$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
<open a new Terminal tab or window to reload>
$ psql

" Homebrew 설치 특정 버전의 수식? "은 문제를 해결하는 다른 방법과 함께 훨씬 포괄적 인 설명을 제공합니다.


수정을 반복하기위한 기여와 명확한 지침에 감사드립니다. 포함 된 링크는 포괄적입니다. 현재 postgres에 문제가 없으므로 아직 다른 사람들에게 이것이 얼마나 유용한 지 확실하지 않지만 다른 사람에게 유용하다고 생각되면 여기에 의견을주십시오.
진화

직접적이지는 않지만 유용하고 관련성이 있습니다. 그는 꽤 일반적인 도구 인 brew를 사용하여 버전을 전환하여 문제를 해결했으며 지금까지 단계를 반복했습니다. 링크는 brew와 관련된 더 많은 문제로 연결됩니다. OP의 질문과 관련하여.
wkhatch

7

postgres를 업그레이드하여이 문제를 해결했습니다.

brew update
brew upgrade

그런 다음 10에서 11로 업그레이드했기 때문에 데이터베이스를 새 주요 버전과 호환되도록 업그레이드해야했습니다.

brew postgresql-upgrade-database

(출처 https://github.com/facebook/react-native/issues/18760#issuecomment-410533581 )


이 오류가 발생했습니다 오류 : postgresql 9.3. * 버전이 설치되지 않았습니다!
nourza

5

따라서 여기에서 많은 문제가 발생하면 사람들은 이미 psql을 실행 중이며 제거해야합니다. postmaster.pid . 그러나 postgres가 시스템에 제대로 설치되지 않았기 때문에 그 문제가 없었습니다.

MAC OSX Yosemite에서 나를 위해 일한 솔루션이 있습니다.

  1. 나는 http://postgresapp.com/에 갔다 앱을 다운로드했습니다.
  2. 앱을 Application / 디렉토리로 옮겼습니다.
  3. 이것을 .bashrc 또는 .bash_profile 또는 .zshrc에 추가하여 $ PATH에 추가했습니다. export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
  4. Applications 디렉토리에서 postgres를 실행하고 명령을 다시 실행하여 작동했습니다.

도움이 되었기를 바랍니다! 국수!

또한이 답변은 가장 도움이되었습니다 : https://stackoverflow.com/a/21503349/3173748


이것이 브루 설치가 아닌 Postgres 앱을 가리 키지 않습니까? 유용한 패키지에서 벗어날 수 있습니다 (예 : pgrouting, Postgres 앱으로 설치할 수 없어서 끝없는 슬픔과 여기에 있습니다)
allsignals

4

psql -p 5432 -h localhost를 실행할 때 루프백 드라이버는 사용하지 않지만 실제 소켓을 사용하므로 소켓 연결을 허용하도록 postgres를 구성해야합니다. 따라서 pgadmin 및 다른 클라이언트가 작동하더라도 psql은 작동하지 않습니다.

postgresql.conf 파일과 pg_hba.conf 파일을 모두 변경해야 실제 소켓을 통한 연결이 가능합니다. 이것은 또한 원격 IP로부터의 연결을 허용하므로 기본적으로 비활성화되어 있습니다.

이러한 파일은 데이터 디렉토리에 있지만 postgres 설치 방법에 따라 실제 위치가 다를 수 있습니다. postgres를 실행하면서 다음 명령을 실행하십시오.

ps -ef | grep postmaster

이 두 파일은 -D 디렉토리입니다 (/ usr / local / pgsql / data 일 수 있음).

postgresql.conf 파일의 경우, listen_address의 주석을 해제하고 다음과 같이 변경하십시오.

listen_address = '*'

pg_hba.conf에 다음 줄을 추가하십시오 :

host all all 0.0.0.0/0 md5

2

나는 실제로 Mac이나 Homebrew를 모르지만 PostgreSQL을 잘 알고 있습니다.

PostgreSQL의 로그 위치와 PostgreSQL의 소켓 디렉토리를 파악하려고합니다. PG를 빌드 할 때 기본적으로 소켓 디렉토리는 / tmp /입니다. PG를 빌드 할 때 변경하지 않고 PG를 시작한 경우 다음을 수행하면 / tmp에서 소켓 파일을 볼 수 있습니다. ls -al / tmp

소켓 파일은 "."로 시작하므로 '-a'에서 ls로 표시되지 않습니다.

거기에 소켓이없고 ps awux | grep postgres, PG가 실행 중이 아니거나 OSX가 설치된 것일 수 있습니다. 일어날 수있는 일은 localhost에서 포트 5432에서 수신 대기하는 중 충돌이 발생할 수 있다는 것입니다. netstat -anp를 사용하여 무엇이든 수신 대기하는 경우 5432를 청취하십시오. Mac OSX PG가 이미 해당 포트에서 청취하는 경우 문제가 되십시오.

희망이 도움이됩니다. 나는 homebrew가 약간 추한 것을 만들 수 있다고 들었고 VM을 사용하도록 권장하기 위해 많은 사람들이 이야기했습니다.


이것에 기여해 주셔서 감사합니다. 좀 더 배경 지식을 얻는 데 도움이된다면, postbrew를 설치할 때 homebrew가 단순히이 스크립트를 실행합니다. github.com/Homebrew/homebrew-core/blob/master/Formula/… 나는 당신이 그것을 살펴보고 당신이 찾은 것에서 더 많은 통찰력을 공유하기를 희망합니다. 사람들이 필요하다고 생각하는 것은 왜이 오류가 발생하는지 디버깅하는 더 쉬운 방법이므로 수행 할 조치를 알 수 있습니다.
진화

해당 스크립트에 대해 이해할 수있는 내용을 바탕으로 "var"디렉토리 (HOMEBREW_PREFIX 아래)에 "postgres.log"가 있습니다. 이 로그 파일에는 PG 시작 시도에 대한 정보가 포함됩니다 (일부 이유로 시작하지 못한 경우 포함). 다음은 포트 5432에서 수신 대기중인 다른 프로세스로 인해 PG가 시작되지 않음을 보여주는 메시지 예입니다.
Stephen Frost

2016-12-19 09 : 11 : 59.582 EST [20669] LOG : IPv4 소켓을 바인딩 할 수 없습니다 : 이미 사용중인 주소 2016-12-19 09 : 11 : 59.582 EST [20669] 힌트 : 다른 포스트 마스터가 이미 포트 5432에서 실행되고 있습니까 ? 그렇지 않은 경우 몇 초 기다렸다가 다시 시도하십시오. 2016-12-19 09 : 11 : 59.582 EST [20669] 경고 : "localhost"에 대한 청취 소켓을 만들 수 없습니다 2016-12-19 09 : 11 : 59.582 EST [20669] 치명적 : TCP / IP 소켓을 만들 수 없습니다 2016 -12-19 09 : 11 : 59.582 EST [20669] LOG : 데이터베이스 시스템이 종료되었습니다
Stephen Frost

또한 스크립트는 기본 소켓 디렉토리를 변경하지 않으므로 / tmp /이어야합니다. postgresql.conf 파일에 대한 PG 데이터 디렉토리 ({HOMEBREW_PREFIX} / var / postgres로 나타남)에서 "unix_socket_directories"를 찾을 수 있습니다. 기본적으로 주석 처리되어 있지만 기본 설정은 다음과 같습니다.
Stephen Frost

#unix_socket_directories = '/ tmp'# 쉼표로 구분 된 디렉토리 목록
Stephen Frost

2

homebrew를 사용하여 Mac 10.15.5에서 실행할 때이 오류가 발생했습니다.

postmaster.pid라는 파일이 있는데 postresql이 종료 될 때 자동으로 삭제되어야합니다.

다음을 수행하지 않으면

  • BREW 서비스가 postgresql을 중지 <--- rm이 db를 손상시키기 전에 종료 실패
  • sudo rm /usr/local/var/postgres/postmaster.pid


1

이 오류가 발생하는 한 가지 이유는 컴퓨터를 다시 시작할 때 로컬 postgres 데이터베이스가 종료되기 때문입니다. 새 터미널 창에서 다음을 입력하십시오.

$psql -h localhost 

서버를 다시 시작합니다.


1

Hello world :)
나에게 가장 좋지만 이상한 방법은 다음 일을하는 것이 었습니다.

1) postgres93.app 또는 다른 버전을 다운로드하십시오 . 이 응용 프로그램을 / Applications / 폴더에 추가하십시오.

2) 파일에 행 (명령 ) 추가.bash_profile (내 홈 디렉토리에 있음)에 .

내보내기 경로 = / Applications / Postgres93.app / Contents / MacOS / bin / : $ PATH
psqlfrom 의 경로 입니다 Postgres93.app. 콘솔이 시작될 때마다 행 (명령)이 실행됩니다.

3) 폴더 Postgres93.app에서 시작하십시오 /Applications/. 로컬 서버를 시작합니다 (포트는 "5432"이고 호스트는 "localhost"입니다).

4) 이 모든 조작 후에 나는 $ createuser -SRDP user_name다른 명령 을 실행 하고 그것이 작동하는 것을보고 기뻤습니다 ! Postgres93.app시스템이 시작될 때마다 실행되도록 할 수 있습니다.

5) 또한 데이터베이스를 그래픽으로보고 싶다면 설치해야합니다 PG Commander.app. postgres DB를 예쁜 데이터 테이블로 보는 좋은 방법입니다.

물론 로컬 서버에만 도움이됩니다. 이 지침이이 문제에 직면 한 다른 사람들에게 도움이된다면 기쁠 것입니다.


1

PostgreSQL 9.3이 있었고 동일한 오류가 발생했습니다.

서버에 연결할 수 없습니다 : 연결이 거부되었습니다. 서버가 "localhost"(127.0.0.1) 호스트에서 실행 중이고 포트 5432에서 TCP / IP 연결을 수락합니까?

나는 이것을 사용하여 이것을 고쳤다.

chmod 777  /var/lib/pgsql/9.3/data/pg_hba.conf 
service postgresql-9.3 restart

그것은 나를 위해 작동합니다.


이 파일은 저에게 존재하지 않습니다
allthesignals

1

나는 (오타가있을 때 그 가치가 무엇인지, 나는이 같은 오류가 발생 md4대신을 md5내에서) pg_hba.conf파일 ( /etc/postgresql/9.5/main/pg_hba.conf)

당신이 내가 한 것처럼 여기에 있다면, 그 파일을 한 번 다시 확인하여 거기에 우스운 것이 없는지 확인하십시오.


pg_hba.conf파일 은 어디에 있습니까?
bubakazouba

1
/etc/postgresql/{postgres_version}/main/pg_hba.conf
Aidan Melen

0

PostgreSQL을 로컬로 실행하는 데 다른 문제가있을 수 있습니다. 설치된 모든 버전의 postgres를 정리하고 새로 시작하는 것이 좋습니다. 일단 설치 한 후에 레일스 프로젝트를 최신 상태로 유지하면 데이터베이스를 쉽게 다시 만들 수 있습니다db/schema.rb

다음은 일반적으로 Mac에 PostgreSQL을 설치 하는 방법 입니다. 로컬 루트 사용자로 데이터베이스를 실행하는 경우, 당신은 생성의 마지막 단계를 생략 할 수 있습니다 todo사용자


0

이유 중 하나는

postgresql.conf 파일의 unix_socket_directories가 찾고있는 디렉토리와 함께 나열되지 않았습니다.

질문 예제에서 / tmp 디렉토리를 찾고 있는데 이것은 postgresql.conf 파일에 제공되어야합니다.

이 같은:

unix_socket_directories = '/var/run/postgresql,/tmp'    # comma-separated list of directories

이 솔루션은 저에게 효과적이었습니다.


0

MacOS를 사용 중이고 homebrew를 사용하는 경우이 답변이 매우 유용하다는 것을 알았습니다.

https://stackoverflow.com/a/27708774/4062901

나에게 서버가 실행 중이지만 업그레이드로 인해 연결 문제가 발생했습니다 (참고 : brew 서비스를 사용합니다). Postgres가 실행 중이 cat /usr/local/var/postgres/server.log면 로그의 내용을 확인하십시오. 내 오류는 연결 문제가 아니라 마이그레이션이었습니다.

또한 수동 마이그레이션 후 제안하지만 작동하지만 더 이상 내 사용자를위한 테이블이 없다는 것을 알았습니다. : 그 수정이 명령을보십시오 createdb(를 통해 대답 "<사용자>"존재하지 않는 데이터베이스 psql의 : FATAL )


0

실행 brew services restart postgresql하여 오류가 표시되는 즉시 Postgres를 다시 시작한 다음 다시 시도하십시오.


0

나를 위해 명령 rm /usr/local/var/postgres/postmaster.pid이 작동하지 않아서 homebrew와 함께 특정 버전의 postgresql을 설치했습니다.

올바른 명령은 rm /usr/local/var/postgres@10/postmaster.pid입니다.

그때 brew services restart postgresql@10.


-5

매우 간단합니다. database.yaml 파일에만 호스트를 추가하십시오.


예 : 호스트 : 127.0.0.1 또는 호스트 : localhost
Ricardo-Nextv

누구나 간단한 솔루션을 좋아합니다. 그러나 어떻게 작동합니까? 위의 의견에서 말했듯이, 이것을 검색하면 많은 복잡한 경로가 무너졌습니다. 다소 정교하게 설명하고 문제의 실제 모습과이 간단한 변경으로 문제를 해결하는 방법에 대해 좀 더 많은 배경 지식을 제공 할 수 있습니까? 이것에 기여해 주셔서 감사합니다! :)
진화

차이점은 IP 연결의 경우 소켓 파일의 위치에 대해 걱정할 필요가 없다는 것입니다. 대신 IP 주소가 걱정됩니다.
Jim Nasby
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.