Brak pliku gniazda „/var/pgsql_socket/.s.PGSQL.5432” w Mountain Lion (OS X Server)

95

Właśnie zaktualizowałem serwer MacMini z Lion Server do Mountain Lion przy użyciu systemu OS X Server. Mam ten sam problem z PostgreSQL, który zrobiłem w zeszłym roku, kiedy po raz pierwszy zainstalowałem Lion Server.

Kiedy próbuję wykonać jakiekolwiek polecenie terminala PostgreSQL, otrzymuję następujący notoryczny komunikat o błędzie, który wielu otrzymało przez lata:

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"?

Próbowałem zmienić hasło do _postgres, kiedy pojawił się błąd. Wypróbowałem kilka poleceń, ale otrzymałem ten sam błąd. Właśnie zrestartowałem serwer, ale bez powodzenia. Zalogowałem się jako root, aby spojrzeć na / var / pgsql_socket i folder jest pusty. Folder / var / pgsql_socket_alt jest również pusty.

Sprawdziłem o tym w Internecie. Jednak prawie wszystkie rozwiązania, które przeczytałem, w tym dotyczące Stack Overflow, sugerują usunięcie i ponowne zainstalowanie PostgreSQL. Nie wiem, ale nie wydaje się to wiarygodną opcją, ponieważ kilka opcji w aplikacji serwera korzysta z PostgreSQL. Skontaktowałem się z Apple Enterprise Support (bez umowy) i powiedziano mi, że mój problem będzie musiał rozwiązać programiści, którzy rzucą 695 USD.

Mam witrynę, która jest teraz wyłączona, ponieważ nie mogę jej odbudować. W tej chwili nie wiem, do kogo zwrócić się o pomoc. Będę nadal szukał w Internecie, aby sprawdzić, czy coś znajdę. Mam jednak nadzieję, że ktoś szybko udzieli mi odpowiedzi, abym mógł odbudować bazę danych.

Aktualizacja: 13.12.2012 15:33 GMT-6

Oto moje wyjście dla 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 

Aktualizacja: 13.12.2012 18:10 GMT-6

Po intensywnym wyszukiwaniu w Internecie znaleziono ten film. Udało mi się uruchomić PostgreSQL i usunąć błąd. Jestem w stanie połączyć się za pomocą pgadmin i phppgadmin. Miałem zamiar wrócić do Lion Server z powodu czystej frustracji. Teraz nie będę musiał.

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

Pamela Cook - LightBe Corp
źródło
22
Twój problem sprowadza się do faktu, że wersja PostgreSQL zainstalowana fabrycznie w systemie Mac OS X psqljest dostępna PATHprzed wersją, którą zainstalowałeś. Szukają gniazda unix w różnych miejscach. Albo użyj tcp / ip, określając, -h localhostalbo najlepiej napraw swoje, PATHtak aby psqlnajpierw znaleźć poprawną . Dziwna decyzja Apple, aby nie tylko dołączyć PostgreSQL do pakietu, ale zepsuć go, aby umieścić rzeczy w niestandardowych miejscach, jest główną przyczyną tego problemu.
Craig Ringer,
3
Istnieje ciągły problem w systemie OSX, w którym osoby pakujące zdecydowały się umieścić gniazdo domeny unix w innym miejscu niż zwykle. Pozwól mi wyszukać ... BRB ... stackoverflow.com/a/8482546/905902
wildplasser,
Skopiowałem starą PATH w .bashrc. Nie zainstalowałem innej wersji postgreSQL. Oto moja instrukcja PATH, która zawiera kod dla RVM. Gdyby ktoś mógł mi powiedzieć, na co mam to zmienić, zrobię to. Kiedy robię, które psql znajduje się w / usr / bin / psql. Bardzo dziękuję wam wszystkim za pomoc. PATH = "$ PATH: $ HOME / .rvm / bin: / usr / bin / psql: / usr / local: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin" Szukam również pliku gniazda, gdy jestem zalogowany jako root.
Pamela Cook - LightBe Corp,
1
Dla tych, którzy używają homebrewi osx@CraigRinger mogą mieć dla Ciebie właściwą odpowiedź, potwierdź za pomocą brew doctor.
Karthik T

Odpowiedzi:

299

Udało mi się dodać następujące elementy do mojego .bash_profile, aby zapobiec wystąpieniu błędu:

export PGHOST=localhost

To działa, ponieważ :

Jeśli pominiesz nazwę hosta, psql połączy się przez gniazdo domeny uniksowej z serwerem na hoście lokalnym lub przez TCP / IP z hostem lokalnym na maszynach, które nie mają gniazd domeny Unix.

Twój system operacyjny obsługuje gniazda domeny Unix, ale gniazdo Uniksa PostgreSQL, które psqlwymaga, albo nie istnieje, albo znajduje się w innej lokalizacji niż oczekuje.

Podanie nazwy hosta jawnie jako localhostwymusza psqlużycie protokołu TCP / IP. Ustawienie zmiennej środowiskowej PGHOSTjest jednym ze sposobów osiągnięcia tego. Jest to udokumentowane w podręczniku psql .

mmasters
źródło
37
Dla każdego, kto ma do czynienia z aplikacją Rails: możesz określić hosta w database.yml.
dwhalen
12
Co to za magia? To znaczy poważnie. Czy możesz wytłumaczyć?
Sreejith Ramakrishnan
1
Zawsze wracam do tej odpowiedzi! Znowu uratował mi życie. Ten fragment naprawdę należy do tej strony, postgresapp.com/documentation/cli-tools.html .
sambecker
1
Nie wiem dlaczego, ale to działa dla mnie! Spotkałem ten problem w rails 5, kiedy używam 'rails db: create', ale już ustawiłem host: localhostw database.yml. @dwhalen
Spark.Bao
1
To działało w Railsach 5.2 bez modyfikacji database.yml, kiedy ten błąd pojawił się po przejściu Postgres do starszej wersji zarządzanej przez Homebrew.
SexxLuthor
37

Spróbuj wkleić w konsoli to:

$ mkdir /var/pgsql_socket/ 

$ ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/
Bryan Algutria
źródło
Wreszcie otrzymałem tę odpowiedź.
Abs
Dobry. Chociaż myślę, że wiem, dlaczego to działa, przydatne byłoby trochę więcej wyjaśnień. To rozwiązanie jest lepsze niż zaakceptowana odpowiedź, brakuje tylko szczegółów.
Glutexo
23

Udało mi się to rozwiązać, wpisując po prostu 127.0.0.1 dla adresu hosta PostgreSQL, zamiast pozostawić go pustym. (Przykład Django)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'database_name',
        'USER': 'database_user',
        'PASSWORD': 'pass',
        'HOST': '127.0.0.1',
        'PORT': '',
        }
}
Nick Woodhams
źródło
1
Czuję się teraz trochę głupio, próbuję rozwiązać ten problem od około 2 dni. W systemie Windows używałem „127.0.0.1”, ale potem przeniosłem kod do wersji produkcyjnej (Debian 7) i musiałem zmienić go na „”. To trochę dziwne, że podają taki komunikat o błędzie, który prowadzi do wniosku, że problem może być gdzie indziej.
fang_dejavu,
10

Otwórz „postgresql.conf” w swoim ulubionym edytorze. Poszukaj zmiennej „unix_socket_directories”, najprawdopodobniej będzie wyglądać następująco:

unix_socket_directories = '/private/tmp/'

Zmień wiersz na ten:

unix_socket_directories = '/var/pgsql_socket/'

Zauważ, że jeśli chcesz, aby pliki gniazd w więcej niż jednym katalogu, oddziel je przecinkami.

Craig Thomas
źródło
Dało to pożądany efekt w postaci próby utworzenia gniazda w innym miejscu, ale serwer nie mógł się uruchomić, ponieważ nie miał uprawnień do tworzenia plików w katalogu / var. Skończyło się na zmianie plików konfiguracyjnych na wyższym poziomie, aby po prostu użyć gniazda, w którym było pierwotnie. Prawie tak, jak podano w tej odpowiedzi stackoverflow.com/a/29511357/1535177 .
Eosis
7

Jak wspominali inni w komentarzach, naprawdę prostym rozwiązaniem tego problemu jest zadeklarowanie „hosta” bazy danych w konfiguracji bazy danych. Dodanie tej odpowiedzi tylko po to, aby była trochę bardziej zrozumiała dla każdego, kto to czyta.

Na przykład w aplikacji Ruby on Rails wyedytuj plik /config/database.yml:

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

Uwaga: ostatnia linia dodana w celu określenia hosta. Przed aktualizacją do Yosemite nigdy nie musiałem określać hosta w ten sposób.

Mam nadzieję, że to komuś pomoże.

Twoje zdrowie

David Battersby
źródło
Musiałem ustawić hosta na katalog, w którym znalazłem .s.PGSQL.5432plik.
Eosis
5

Sprawdź stan bazy danych:

service postgresql status

Jeśli baza danych nie działa, uruchom bazę danych:

sudo service postgresql start
Sivakumar RJ
źródło
utknąłem z powyższym błędem i rozwiązałem go, uruchamiając db.
Sivakumar RJ
4

Czy możesz sprawdzić swój plik postgresql.conf?

Na jakim porcie działa Twój postgres?

Myślę, że nie działa na porcie 5432, jeśli nie, zmień go na 5432

LUB na terminalu

psql -U  postgres -p YOUR_PORT_NUMBER database_name
myśliwy
źródło
1
Nie mogę uruchomić polecenia terminala. Otrzymuję ten sam błąd. Potrzebuję pomocy, gdzie mogę znaleźć plik postgresql.conf. Kiedyś miałem folder / var / pgsql podczas uruchamiania Lion Server. Myślę, że to już minęło. Właśnie opublikowałem moje dane wyjściowe dla polecenia ps grep. Włączyłem usługę Wiki, aby uruchomić PostgreSQL. Powiedziano mi, że mogę używać poleceń sudo serveradmin bez włączania jakichkolwiek usług aplikacji serwera, ale one nie działają. Jestem teraz zalogowany jako root, więc powinienem być w stanie zrobić wszystko :) Sprawdziłem porty w Narzędziu sieciowym. 5432 nie używane.
Pamela Cook - LightBe Corp
2

Miałem ten problem z Django.

Napraw to, jawnie ustawiając nazwę hosta na „localhost”.

Ashwin Balamohan
źródło
2

robię to słowem:

dpkg-reconfigure locales

i wybierz preferowane lokalizacje

pg_createcluster 9.5 main --start

(9.5 to moja wersja postgresql)

/etc/init.d/postgresql start

a potem to słowo!

sudo su - postgres
psql
mymusise
źródło
1
apt-get install postgres-xc-client
apt-get install postgres-xc
Lucia
źródło
1
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"?

Ciągle otrzymywałem powyższy błąd i żadne z powyższych rozwiązań nie działało. Wreszcie poniższe rozwiązanie rozwiązało mój problem w systemie Mac OS X

Zainstaluj postgres za pomocą brew

brew install postgres

Zainstaluj usługi parzenia

brew tap homebrew/services

Aby uruchomić postgres jako usługę w tle

brew services start postgresql

Aby zatrzymać postgres ręcznie

brew services stop postgresql

Możemy również skorzystać z usług piwowarskich, aby zrestartować Postgres

brew services restart postgresql
Sudharshan
źródło
1

sprawdź, czy serwer postgres działa z następującym kodem

sudo service postgresql status

jeśli serwer postgres jest nieaktywny, wpisz następującą komendę.

sudo service postgresql start
wailinux
źródło
1

Ten błąd wystąpił po tym, jak mój komputer sam się zawiesił i ponownie uruchomił. Rozwiązanie dla mnie nie zostało znalezione na tej stronie, a raczej na innym bardzo wysoko ocenianym pytaniu SO z tym samym błędem psql: nie można połączyć się z serwerem: Nie ma takiego pliku lub katalogu (Mac OS X) . Odpowiedź: po prostu usuń ten plik /usr/local/var/postgres/postmaster.pid, a potem brew services restart postgresqlzałatwił sprawę. Zwróć uwagę na ostrzeżenie w połączonej odpowiedzi o zabijaniu procesów postgres, zanim to zrobisz, w przeciwnym razie możesz trwale uszkodzić bazę danych.

wetjosh
źródło
1

Dla aplikacji RubyOnRails dodaj localhost Jeśli używasz niestandardowej wersji Postgresql

# config/database.yml
default: &default
  host: localhost
itsnikolay
źródło
0

Uprawnienia do plików są restrykcyjne w bazie danych Postgres należącej do systemu Mac OS. Te uprawnienia są resetowane po restarcie lub restarcie Postgres: np. Serveradmin start postgres.

Dlatego tymczasowo zresetuj uprawnienia lub własność:

sudo chmod o+rwx /var/pgsql_socket/.s.PGSQL.5432
sudo chown "webUser"  /var/pgsql_socket/.s.PGSQL.5432

Resetowanie uprawnień nie jest bezpieczne, więc dla rozwiązania zainstaluj wersję bazy danych, którą posiadasz.

clewis
źródło
0

Zajęło mi to trochę czasu, ale udało mi się to w końcu uruchomić po przejrzeniu oferowanych sugestii i wykonaniu dodatkowych wyszukiwań w Internecie. Wykorzystałem informacje w poniższym filmie na YouTube stworzonym przez Mactasia:

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

Kiedy to zrobiłem, zobaczyłem plik z rozszerzeniem .lock. Jednak nadal otrzymywałem błąd, gdy próbowałem uruchomić serwer Rails, kiedy wznowiłem pracę z moją aplikacją Rails przy użyciu PostgreSQL. Tym razem dostałem błąd odmowy pozwolenia. Wtedy przypomniałem sobie, że nie tylko musiałem zmienić Listen_addresses w plist, ale także zmienić unit_socket_permissions na 0777. Zalogowałem się również jako root, aby zmienić uprawnienia w folderze var / pgsql_socket, do którego mam dostęp na poziom użytkownika. Postgres działa teraz dobrze. Jestem w trakcie ponownego ładowania danych z kopii zapasowej SQL.

To, czego nie rozumiałem, to to, że kiedy włączałem wiki, PostgreSQL prawdopodobnie działał, gdy zrobiłem postgres sudo serveradmin fullstatus, ale nadal otrzymałem błąd. No cóż.

Pamela Cook - LightBe Corp
źródło
0

Właśnie utworzyłem nowy klaster i który działał dla mnie, używałem (PostgreSQL) 9.3.20:

sudo pg_createcluster 9.3 main --start
Bruno Filgueiras
źródło
0

Najpierw usuń zainstalowane postgresy:

sudo apt-get purge postgr*
sudo apt-get autoremove

Następnie zainstaluj „synaptic”:

sudo apt-get install synaptic
sudo apt-get update

Następnie zainstaluj Postgres

sudo apt-get install postgresql postgresql-contrib
Gurudath BN
źródło