2011-09-10 3 views

답변

2

아마도 psql과 서버는 유닉스 도메인 소켓을 위해 다른 위치를 사용합니다. (/ var/pgsql_socket /은 이상한 위치입니다) 이것은 다른 패키지의 바이너리를 혼합하는 경우 발생할 수 있습니다. 소켓을 찾아보십시오 (/ tmp를/시작하기에 좋은 장소입니다) 당신은 -h 옵션 악용하여 다른 디렉토리를 사용 psql를 강제 할 수 있습니다 :

psql -h /tmp/ 
+0

'-h' 스위치에 +1, 로컬 연결 (처음에 슬래시)으로 작동합니다. Unix 도메인 소켓의 경로는'postgresql의 [unix_socket_directory'] (http://www.postgresql.org/docs/current/static/runtime-config-connection.html#GUC-UNIX-SOCKET-DIRECTORY) 속성에 의해 결정됩니다 .conf'. –

+0

'unix_socket_directory'속성은 비어있을 수 있습니다 (설정 한 적이 한번도 없습니다).이 경우 기본적으로/tmp /가 기본값입니다. – wildplasser

+0

팁 주셔서 감사합니다. postgres의 표준 OS X 패키지를 사용하고 있습니다.이 패키지는 유닉스 도메인 소켓 설정을 설명합니다. – Wells

2

이 OS X에 나에게 무슨 일을하고는 문제는 /usr/bin/psql이 내가 사용하고있는 것이지만, 포스트 마스터는 /Library/PostgreSQL/9.0에서 실행 중입니다. /Library/PostgreSQL/9.0/bin/psql (다른 모든 것보다 먼저 내 PATH에 넣음)을 사용하여 문제가 해결되었습니다.

1

다른 대안으로는 Mac OS X Server에 대해 뭔가를 제공 할 수 있다고 생각합니다. 나는 매우 비슷한 문제를 겪고있다. 심지어 나의 경우에도 -h localhost은 네트워킹이 많은 경우에 아주 좋은 아이디어 인 방식으로 PostregSQL에서 비활성화 되었기 때문에 작동하지 않았다. Mac OS X Server의 경우는 launchd을 통해 PostgreSQL 서버를 시작합니다.

일부 힌트 당신은 주변을 둘러과 같이

  • serveradmin 서비스 : postgres
  • launchd 구성 파일 : /System/Library/LaunchDaemons/org.postgresql.postgres.plist
  • 데이터베이스 폴더 : /var/pgsql
  • 소켓 폴더 : /var/pgsql_socket

그 범죄자 구성 파일은 데이터베이스 폴더 아래 postgresql.conf에서 찾을 수있는 몇 가지 구성 지시문을 무시합니다. 특히이 두 :

  • unix_socket_group
  • unix_socket_permissions

당신은 _postgres 계정이 서버를 실행하는 데 사용되는 활성 사용자가 _postgres 그룹의 구성원 인 경우 모든도에 액세스 할 수 있는지 확인할 수 있습니다. dscl . -read /Groups/_postgres GroupMembership을 실행하여

당신은 그룹이 구성원이 기본적으로 그것을 볼 수 있습니다 _devicemgr_calendar_teamsserver_www

난 당신이 두 가지 옵션이 있습니다 같아요. _postgres 그룹에 자신을 추가하거나 launchd 구성 plist 파일을 변경하십시오. 나중에 일반 텍스트 편집입니다 ...그러나 보안에주의하십시오. 이렇게하면 변경하는 기준에 맞는 서버를 열 수 있습니다 (마지막 단락 참조).

전자는 Server.app 또는 dscl 명령 줄 유틸리티를 통해 수행 할 수 있습니다. 첫 번째 옵션은 아마도 추가 할 것이 아무것도 필요하지 않습니다. 시스템 계정 (보기 -> 시스템 계정 숨기기/표시)을 볼 수 있는지 확인하십시오. 그래서이 _postgres 그룹에 사용자를 추가해야 CLI 마약 중독자의 종류 해요 :

물론
sudo dscl . -append /Groups/_postgres GroupMembership $USER 

당신이 맥 OS X Server 데이터베이스에 대한 액세스 권한을 부여하고 있기 때문에 당신이 다음 계정으로 실행 무엇을 조심해야한다 백 엔드. 따라서 _postgres 계정을 보호하거나 별도의 사용자를 생성하여 데이터베이스를 조작하거나 거기에 사적인 것을 저장하지 마십시오.

8

psql의 충돌 버전 (사자에게서 하나, 자작에서 하나) 때문에 나도 똑같은 일이 일어났습니다. psql이/tmp 소켓 디렉토리를 사용하는 방법을 알아 내지 못했지만, 해결 방법이 있습니다.

은 당신의 .bashrc (또는 .zshrc 등)에 다음을 넣어 : -h 플래그를 제공하지 않고,

export PGHOST=/tmp 

이 다시 올바른 소켓 디렉토리에 대한 올바른 "호스트"설정을

관련 문제