[postgresql] Mountain Lion에 소켓 파일“/var/pgsql_socket/.s.PGSQL.5432”누락 (OS X 서버)

방금 OS X Server를 사용하여 MacMini Server를 Lion Server에서 Mountain Lion으로 업그레이드했습니다. 작년에 Lion Server를 처음 설치할 때와 동일한 문제가 PostgreSQL에서 발생합니다.

모든 종류의 PostgreSQL 터미널 명령을 수행하려고하면 수년 동안 많은 사람들이받은 다음과 같은 악명 높은 오류 메시지가 나타납니다.

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의 비밀번호를 변경하려고했습니다. 여러 명령을 시도했지만 동일한 오류가 발생했습니다. 방금 서버를 재부팅했지만 운이 없습니다. / var / pgsql_socket을보기 위해 루트로 로그인했는데 폴더가 비어 있습니다. / var / pgsql_socket_alt 폴더도 비어 있습니다.

나는 이것에 대해 온라인으로 확인했습니다. 그러나 Stack Overflow를 포함하여 내가 읽은 거의 모든 솔루션은 PostgreSQL의 제거 및 재설치를 제안합니다. 모르겠지만 서버 앱의 여러 옵션이 PostgreSQL을 사용하기 때문에 이것은 그럴듯한 옵션처럼 보이지 않습니다. 나는 Apple Enterprise Support (계약 없음)에 연락했고 $ 695를 던지는 개발자가 내 문제를 해결해야한다고 들었습니다.

나는 그것을 재 구축 할 수 없기 때문에 지금 다운 된 웹 사이트를 가지고있다. 이 시점에서 어디에서 도움을 요청해야할지 모르겠습니다. 나는 무언가를 찾을 수 있는지 계속 온라인에서 찾을 것입니다. 그러나 누군가가 신속하게 대답하여 데이터베이스를 다시 작성할 수 있기를 바랍니다.

업데이트 : 2012 년 12 월 13 일 15:33 GMT-6

다음은 ps auwwx | grep postg에 대한 출력입니다.

_postgres      28123   0.0  0.1  2479696   7724   ??  Ss    3:01PM   0:00.04 /Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D /Library/Server/PostgreSQL For Server Services/Data -c listen_addresses= -c log_connections=on -c log_directory=/Library/Logs/PostgreSQL -c log_filename=PostgreSQL_Server_Services.log -c log_line_prefix=%t  -c log_lock_waits=on -c log_statement=ddl -c logging_collector=on -c unix_socket_directory=/Library/Server/PostgreSQL For Server Services/Socket -c unix_socket_group=_postgres -c unix_socket_permissions=0770
server1        28216   0.0  0.0  2432768    620 s000  R+    3:02PM   0:00.00 grep postg
_postgres      28138   0.0  0.0  2439388    752   ??  Ss    3:01PM   0:00.01 postgres: stats collector process
_postgres      28137   0.0  0.0  2479828   1968   ??  Ss    3:01PM   0:00.00 postgres: autovacuum launcher process
_postgres      28136   0.0  0.0  2479696    544   ??  Ss    3:01PM   0:00.00 postgres: wal writer process
_postgres      28135   0.0  0.0  2479696    732   ??  Ss    3:01PM   0:00.01 postgres: writer process
_postgres      28134   0.0  0.0  2479696    592   ??  Ss    3:01PM   0:00.00 postgres: checkpointer process
_postgres      28131   0.0  0.0  2439388    368   ??  Ss    3:01PM   0:00.00 postgres: logger process 

업데이트 : 2012 년 12 월 13 일 18:10 GMT-6

강렬한 웹 검색 끝에이 비디오가 발견되었습니다. PostgreSQL을 작동시키고 오류를 제거 할 수있었습니다. pgadmin과 phppgadmin을 사용하여 연결할 수 있습니다. 좌절감 때문에 Lion Server로 돌아 가려고했습니다. 이제 그럴 필요가 없습니다.

http://www.youtube.com/watch?v=y1c7WFMMkZ4



답변

오류를 방지하기 위해 .bash_profile에 다음을 추가 할 수있었습니다.

export PGHOST=localhost

이것은 다음과 같은 이유로 작동합니다 .

호스트 이름을 생략하면 psql은 Unix 도메인 소켓을 통해 로컬 호스트의 서버에 연결하거나 TCP / IP를 통해 Unix 도메인 소켓이없는 시스템의 localhost에 연결합니다.

OS가 Unix 도메인 소켓을 지원하지만 필요한 PostgreSQL의 Unix 소켓 psql이 없거나 예상과 다른 위치에 있습니다.

호스트 이름을 명시 적으로 지정하면 TCP / IP 를 localhost강제 psql로 사용합니다. 환경 변수를 설정하는 PGHOST것은이를 달성하는 방법 중 하나입니다. psql의 매뉴얼에 문서화되어 있습니다 .


답변

다음과 같이 콘솔에 붙여 넣으십시오.

$ mkdir /var/pgsql_socket/

$ ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/


답변

PostgreSQL 호스트 주소를 비워 두지 않고 간단히 127.0.0.1을 입력하여 해결할 수있었습니다. (장고 예시)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'database_name',
        'USER': 'database_user',
        'PASSWORD': 'pass',
        'HOST': '127.0.0.1',
        'PORT': '',
        }
}


답변

선호하는 편집기에서 ‘postgresql.conf’를 엽니 다. ‘unix_socket_directories’변수를 찾으면 다음과 같이 보일 것입니다.

unix_socket_directories = '/private/tmp/'

줄을 다음과 같이 변경하십시오.

unix_socket_directories = '/var/pgsql_socket/'

둘 이상의 디렉토리에있는 소켓 파일을 쉼표로 구분하려면 참고하십시오.


답변

훨씬 더 간단한 솔루션입니다 ( http://daniel.fone.net.nz/blog/2014/12/01/fixing-connection-errors-after-upgrading-postgres/ 덕분에 ). postgres 9.4로 업그레이드했습니다. 내 경우에는 내가해야 할 모든 것 (인터넷 검색을 한 후 성공하지 못함)

gem uninstall pg
gem uninstall activerecord-postgresql-adapter
bundle install

webrick을 다시 시작하고 완료하십시오!


답변

의견에서 다른 사람들이 언급했듯이이 문제에 대한 정말 간단한 해결책은 데이터베이스 구성 내에서 데이터베이스 ‘호스트’를 선언하는 것입니다. 이 답변을 읽는 사람에게 좀 더 명확하게하기 위해이 답변을 추가합니다.

예를 들어 Ruby on Rails 앱에서 /config/database.yml을 편집합니다.

development:
  adapter: postgresql
  encoding: unicode
  database: database_name
  pool: 5
  host: localhost

참고 : 호스트를 지정하기 위해 추가 된 마지막 줄입니다. Yosemite로 업데이트하기 전에는 이런 방식으로 호스트를 지정할 필요가 없었습니다.

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

건배


답변

데이터베이스 상태를 확인하십시오.

service postgresql status

데이터베이스가 실행되고 있지 않으면 db를 시작합니다.

sudo service postgresql start