PostgreSQL이 로컬에서 실행 중이지만 연결할 수 없습니다. 왜?


32

최근에 Mac OS X Lion (10.7.4)에서 Mountain Lion (10.8)으로 내 컴퓨터를 업데이트했는데 PostgreSQL 설치가 중단 된 것 같습니다. 원래 Homebrew를 통해 설치되었습니다. DBA는 아니지만 누군가 문제를 해결하는 방법을 알려줄 수 있기를 바랍니다.

연결할 수 없습니다 (그러나 산 이전 라이온 이전에는 가능했습니다).

$ psql -U rails -d myapp_development
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

그러나 Postgres는 여전히 명확하게 실행 중입니다.

$ ps aux | grep postgres
meltemi          2010   0.0  0.0  2444124   5292   ??  Ss   Wed01PM   0:00.02 postgres: rails myapp_development [local] idle    
meltemi           562   0.0  0.0  2439312    592   ??  Ss   Wed12PM   0:02.28 postgres: stats collector process       
meltemi           561   0.0  0.0  2443228   1832   ??  Ss   Wed12PM   0:01.57 postgres: autovacuum launcher process       
meltemi           560   0.0  0.0  2443096    596   ??  Ss   Wed12PM   0:02.89 postgres: wal writer process       
meltemi           559   0.0  0.0  2443096   1072   ??  Ss   Wed12PM   0:04.01 postgres: writer process       
meltemi           466   0.0  0.0  2443096   3728   ??  S    Wed12PM   0:00.85 /usr/local/bin/postgres -D /usr/local/varpostgres -r /usr/local/var/postgres/server.log

그리고 로컬 Rails 앱의 쿼리 (테스트 DB 및 개발 DB 모두)에 응답합니다.

  User Load (0.2ms)  SELECT "users".* FROM "users" 
  Rendered users/index.html.haml within layouts/application (1.3ms)

위에서 언급 한 소켓 파일 /var/pgsql_socket/은 물론 디렉토리 가없는 것 같습니다 /var/pgsql_socket/.s.PGSQL.5432!?! 아마도 Mountain Lion 설치로 인해 사라 졌을까요?

$ ls -l /var/ | grep pg
drwxr-x---   2 _postgres  _postgres    68 Jun 20 16:39 pgsql_socket_alt

이 문제를 어떻게 해결할 수 있습니까?


postgres 관리자는 아니지만 소켓 파일이 누락 된 것 같습니다. / var / pgsql_socket 디렉토리를 작성하고 (사용자에게 쓰기 권한이 있음) 서버를 다시 시작하십시오. 그것이 수정되는지 확인하십시오
Derek Downey

SO 관련 질문 . Apple이 업그레이드를 잘하지 않은 것 같습니다.
Erwin Brandstetter

로그 파일에 소켓 파일에 대한 언급이 /usr/local/var/postgres/server.log있습니까?
Philᵀᴹ

@ErwinBrandstetter Apple이 수동으로 설치 한 타사 * nix 앱을 업그레이드하는 "좋은 일"을하려면 어떻게해야합니까?
Philᵀᴹ

@ 필-언급이 없습니다. 이것이 경로 변수 문제 일 수 있다고 생각하기 시작했습니다. 내 생각 $PATH업그레이드를 변경있어하는 것은 /usr/bin앞인지 /usr/local/bin나는 산 사자가 미리 설치된 PostgreSQL을 함께 제공 할 수 있습니다 생각!?! 조사 중 ...
Meltemi

답변:


30

나는 매우 비슷한 문제가 있다는 것을 알았습니다. 즉, postgres는 /var/pgsql_socket_alt내 소프트웨어 중 어느 것도 보지 않을 소켓을 열고 있었지만 내 문제에 대한 해결책은 내 문제만이 아닙니다 $PATH.

나는 디렉토리를 작성했다 /var/pgsql_socket, 나 자신에 chown하지, 그리고 세트 unix_socket_directorypostgresql.conf(에있는 /usr/local/var/postgres) 그 디렉토리로 다음 사용 pg_ctl에 진을 /usr/local/bin경우 이는 (성공적으로 바로 포스트 그레스 서버를 시작하기 $PATH에 온다 - 확인 which pg_ctl에 결의를 /usr/local/bin/pg_ctl단지 항상 또는 명시 적으로 부르십시오).

이것은 /var/pgsql_socket_alt언급을 통해이 질문을 찾는 다른 사용자에게 도움이 될 수 있습니다 .


흥미 롭군 마운틴 라이온에도 있습니까? Homebrew와 함께 PostgreSQL을 설치 했습니까? 그렇다면 다른 사람이 $PATH내가 한 것처럼 변경하지 않고이 솔루션을 확인할 수 있는지 궁금합니다 .
Meltemi

예, 그래요!
Will

@wolftron 귀하의 솔루션이 나에게 도움이되었습니다 (Mountain Lion, homebrew / postgres, / var / pgsql_socket_alt, 전체 9 개). 홈브류가있는 Mountain Lion의 새로운 문제입니까? 당신이 그렇게 생각하면 그들과 함께 티켓을 열게

@Jamie의 인증을받은 것 같습니다.
Will

postgresql 9.2.1의 OS X 10.8.2 / brew 설치 에서이 문제와 솔루션을 확인할 수 있습니다.
Hartwig

8

그럴듯하고 전형적인 설명은 psqlhomebrew와 함께 제공 /usr/local/bin/psql되는 것이 /usr/bin/psql(OS X와 ​​함께 제공되는) $ PATH에있는 것과 다릅니다 . 전체 경로로 시도해 볼 수 있습니다.

$ /usr/local/bin/psql -U rails -d myapp_development

또한 ps질문 결과에 다소 특이한 점이 있습니다. postgres 서버는 meltemiUnix 사용자로 실행되는 반면 일반적으로 전용 postgresUnix 사용자가 사용됩니다.


또한 _postgres사용자 / 그룹 (밑줄 포함)은 알 수 없습니다. 그것은 인공물입니까, 아니면 예상입니까?
Erwin Brandstetter

예, $PATH말씀하신대로 문제 가있는 것 같습니다 . /usr/local/bin/psql데이터베이스에 액세스 할 때와 같이 작동 합니다. Lion에 시스템 PostgreSQL이 없거나 $ PATH가 다르게 설정되었습니다. 내가 이것을 마지막으로 혼동 한 지 1 년이 지났으므로 정확하게 기억할 수 없습니다. Unix 사용자의 경우 ... PostgreSQL의 Homebrew 설치로 서버가 시작되고 서버가 설치된 로컬 사용자로 기본 설정됩니다. Mac OS X Server 에서 상황이 다르게 설정되어 PostgreSQL이에서 자동으로 시작됩니다 postgres.
Meltemi

4

psql 클라이언트의 구성 파일을 모르겠습니다. 그러나 psql은 명령 행 옵션과 관련된 많은 환경 변수를 존중합니다.

따라서 psql이 선택한 소켓을 자동으로 사용하도록하려면 PGHOST 변수를 소켓을 포함하는 디렉토리로 설정할 수 있습니다. 즉

PGHOST=/var/pgsql_socket_alt
psql -d mydatabsase

1
PGHOST를 소켓 파일이있는 디렉토리로 설정할 수있는 곳은 어디에도 문서화되어 있지 않습니다. 그러나 실제로 작동합니다. 감사!
Andrew Schulman

3

시험:

psql -U rails -d myapp_development -h localhost

또는

psql -U rails -d myapp_development -h 127.0.0.1

3

늦었지만 도움이되는 것으로 나타났습니다 : http://tammersaleh.com/posts/installing-postgresql-for-rails-3-1-on-lion

그것은 Lion을위한 것이지만 10.6.8에서 Mountain Lion으로 업그레이드하고 10.6.8 이전에 HomeBrew를 통해 PostgreSQL을 설치 한 후이 스레드의 문제와 동일한 문제가있었습니다. 또한 /var/pgsql_socket_alt업그레이드 후 수수께끼의 폴더 /var/pgsql_socket가 있었지만 @wolftron이 제안한대로 폴더를 제거하고 만들었습니다 . 그러나 이것이 최종 솔루션은 아니 었습니다.

unix_socket_directory비워 두거나 주석 처리 한 postgresql.conf경우 업그레이드 이전에 존재하는 모든 프로젝트는 소켓 /var/pgsql_socket이 누락되었다고 불평합니다 . 그러나 conf를 변경하고 하드 코딩 var/pgsql_socket하면 새 프로젝트에서 소켓 /tmp이 누락되었다고 불평합니다 . 매우 실망 스럽습니다 ... pg gem10.8 이전 프로젝트 ( gem uninstall pg && gem install pg) 에 다시 설치 unix_socket_directory하고 conf파일에 주석을 달 때까지 . pg_ctl서버를 빠르게 다시 시작한 후에는 새 프로젝트와 기존 프로젝트가 모두 작동했습니다. 내 pgsql 소켓은 /tmp지금 살아 있습니다.

참고 : activerecord-postgresql-adaptergem을 사용하는 경우 먼저 gem을 제거한 다음 pg를 다시 설치 한 다음 다시 설치 activerecord-postgresql-adapter하십시오.


2

방금 dba SE에만 가입했기 때문에 관련 게시물에 대해 언급 할 수없는 것 같습니다 (얼마나 끔찍합니다!).

그러나 나는 @thure와 같은 보트에 있다고 확신했다. / usr / local / bin이 PATH에서 / usr / bin보다 빠르다는 것을 확인하고 쉘이 whichtype로 등으로 해시 한 바이너리를 확인했습니다 .

@thure와 동일한 증상을 보았습니다. 그때 나는 주현절이 있었다. pgMac의 path_helper (/ etc / profile에서 실행되고 / usr / bin을 / usr / local / bin 앞에 놓음)에 의해 PATH가 부정적인 영향을받은 쉘에서 gem (Ruby를 사용 하고 있음)을 다시 빌드했음을 깨달았습니다. .

pg를 제거하고 PATH가 올바른 쉘에 다시 설치했습니다. 갑자기 나는 연결할 수 있었다!

따라서 언어 바인딩 사람들을 다시 컴파일하고 (아마도)의 올바른 사본을 찾도록하십시오 pg_config.



1

실제 위치를 예상 위치에 연결하면 정상적으로 작동한다는 것을 알았습니다.

sudo ln -s /var/pgsql_socket_alt /var/pgsql_socket

@thure가 받아 들인 대답의 라인을 따라 있지만 더 간단합니다.


1

2016 년, 엘 캐피 탄 (El Capitan)이 나오고 애플은 계속 변화하고 있습니다. Postgres는 OS의 일부로 설치되며 postgres 구성 파일은 postgresql.conf의 unix_socket_directories 등록 정보를 / tmp로 설정합니다. 소켓은 /tmp/.s.PGSQL.5432에 있습니다. 다음을 실행하여 문제를 해결할 수있었습니다.

sudo ln -s /tmp /var/pgsql_socket

이것이 누군가를 돕기를 바랍니다.


1

올바른 소켓 파일을 찾으십시오

find / -name .s.PGSQL.5432 -ls

결과에서 파일 경로를 얻고 psql 명령 내에서 "-h"매개 변수와 함께 경로를 사용하십시오.

예를 들어, 이것은 서버에 대한 ssh 세션 내에서 macOS 서버 캘린더 및 연락처 데이터베이스에 연결하는 방법입니다.

sudo psql -U _calendar -h /private/var/run/caldavd/PostgresSocket/ -d caldav

그런 다음 경로의 소켓 파일을 사용하여 연결합니다.


1

기본적으로 postgres는 유닉스 도메인 소켓을 통해 연결을 시도하는 것 같습니다. 유닉스 도메인 소켓

이것은 docker에서 postgres 인스턴스를 실행할 때 발생했습니다. 서버가 어떤 종류의 연결을 허용하는지 확인해야합니다. 나를 위해 그것은 분명히 TCP 였고 유닉스 도메인 소켓이 아닙니다.

호스트를 수락하는 플래그를 추가하면 연결이 올바른 경로로 리디렉션되고 문제가 해결되었습니다.

psql -U username -p port -h host

추신 : 유닉스 도메인 소켓은 커널 수준에서 작동하며 연결이 TCP 연결에 필요한 모든 재즈를 거치지 않아도됩니다. 프로세스 간 통신의 일부로 다른 프로세스에서 자신의 컴퓨터에 연결하려고 할 때 매우 빠르고 효율적입니다.


0

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를 예쁜 데이터 테이블로 보는 좋은 방법입니다.

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



0

psql커맨드 라인 에서 실행하려고 할 때도 동일한 오류가 발생했습니다 . 내 솔루션이 훨씬 간단하다는 것이 밝혀졌습니다. 구성 파일 /etc/postgresql/9.4/main/postgres.conf 에서 수신 포트를 잘못 구성했습니다 . 포트 = 5432에서 포트 = 5433으로 포트를 변경했습니다. 5432로 다시 변경하면 예상대로 작동했습니다.

비슷한 작업을 수행했는지 테스트하려면 다음을 실행 $ psql -p5433 하십시오. psql 명령에 다음과 같은 유용한 옵션이 있습니다. http://www.postgresql.org/docs/9.4/static/app-psql .html 을 사용하여 자신 만의 잘못된 구성을 테스트 할 수 있습니다. 물론, * .conf 파일에서 마지막 구성 변경 세트를 제거하여 문제의 원인인지 테스트 할 수도 있습니다. 파일 권한과 소유권에 대해 자세히 알아보기 전에 체크 아웃 할 가치가 있다고 생각합니다. (그냥 잊지 마세요 /etc/init.d/postgresql restart)

찾을 수없는 것은 psql CLI 명령의 기본값을 설정하는 구성 파일이었습니다. 누군가가 그것에 대해 언급 할 수 있습니까?

저는 항상 프로그래밍의 첫 번째 원칙으로 되돌아갑니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.