Niedawno zaktualizowałem moją maszynę z Mac OS X Lion (10.7.4) do Mountain Lion (10.8) i myślę, że to zepsuło moją instalację PostgreSQL. Został on zainstalowany pierwotnie przez Homebrew. Nie jestem DBA, ale mam nadzieję, że ktoś powie mi, jak rozwiązać ten problem.
Nie mogę się połączyć (ale mogłem to zrobić przed Lion Mountain):
$ 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"?
Ale Postgres nadal działa:
$ 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
Odpowiada na zapytania (zarówno do testowej bazy danych, jak i bazy danych programisty) z lokalnej aplikacji Rails
User Load (0.2ms) SELECT "users".* FROM "users"
Rendered users/index.html.haml within layouts/application (1.3ms)
Wygląda na to, że nie ma /var/pgsql_socket/
katalogu, a co dopiero /var/pgsql_socket/.s.PGSQL.5432
wspomnianego wyżej pliku gniazda!?! Być może instalacja Mountain Lion usunęła to?
$ ls -l /var/ | grep pg
drwxr-x--- 2 _postgres _postgres 68 Jun 20 16:39 pgsql_socket_alt
Jak mogę rozwiązać ten problem?
postgresql
psql
mac-os-x
Meltemi
źródło
źródło
/usr/local/var/postgres/server.log
?$PATH
został zmieniony z uaktualnieniem/usr/bin
jest przed/usr/local/bin
i myślę, że Mountain Lion mogą pochodzić z PostgreSQL pre-instalowany!?! Dochodzenie ...Odpowiedzi:
Odkryłem, że mam bardzo podobny problem, mianowicie, że postgres otwierał gniazdo, w
/var/pgsql_socket_alt
którym żadne z moich programów nie oczekuje, ale rozwiązanie mojego problemu było nie tylko moim problemem$PATH
.Musiałem stworzyć katalog
/var/pgsql_socket
chown to dla siebie, a zestawunix_socket_directory
wpostgresql.conf
(znajduje się/usr/local/var/postgres
) do tego katalogu, a następnie użyćpg_ctl
pliku binarnego w/usr/local/bin
celu uruchomienia odpowiedniego serwera postgres'owy sukcesem (czyli tam, gdzie$PATH
przychodzi - upewnij się,which pg_ctl
postanawia/usr/local/bin/pg_ctl
, lub po prostu zawsze nazwij to jawnie).Może to pomóc innym użytkownikom, którzy znajdą to pytanie poprzez
/var/pgsql_socket_alt
wzmiankę.źródło
$PATH
tak jak ja.Prawdopodobnym i typowym wyjaśnieniem byłoby to, że ten,
psql
który pochodzi z homebrew,/usr/local/bin/psql
różni się od tego, który byłby w twojej $ PATH, na przykład/usr/bin/psql
(w pakiecie z OS X). Możesz spróbować z pełną ścieżką:$ /usr/local/bin/psql -U rails -d myapp_development
Jest też coś niezwykłego w
ps
wynikach twojego pytania: serwer Postgres działa podmeltemi
użytkownikiem Unixa, podczas gdypostgres
do tego celu służy dedykowany użytkownik Unixa.źródło
_postgres
(z podkreśleniem) dla użytkownika / grupy nie są mi znane. Czy to artefakt, czy się go spodziewamy?$PATH
problemem. Wszystko działa jak poprzednio, kiedy korzystam/usr/local/bin/psql
z dostępu do bazy danych. Albo Lion nie miał systemu PostgreSQL, albo moja $ PATH została skonfigurowana inaczej. Minął rok, odkąd po raz ostatni się z tym pogubiłem, więc nie pamiętam dokładnie. Jeśli chodzi o użytkownika Unix ... z instalacją PostgreSQL Homebrew, serwer jest uruchamiany przez uruchomienie, a użytkownik jest ustawiony domyślnie na lokalnego użytkownika, który go zainstalował. Sprawy są skonfigurowane inaczej na Mac OS X Server, który automatycznie uruchamia PostgreSQL podpostgres
.Nie znam żadnego pliku konfiguracyjnego dla klienta psql. Jednak psql respektuje wiele zmiennych środowiskowych, które korelują z opcjami wiersza poleceń.
Aby więc psql automatycznie używał wybranego gniazda, możesz ustawić zmienną PGHOST na katalog zawierający gniazdo. to znaczy
źródło
Próbować:
lub
źródło
Późno, ale uznałem to za pomocne: http://tammersaleh.com/posts/installing-postgresql-for-rails-3-1-on-lion
To było dla Lion, ale miałem problemy z tym w tym wątku po aktualizacji z 10.6.8 do Mountain Lion i zainstalowaniu PostgreSQL przez HomeBrew wcześniej na 10.6.8. Po
/var/pgsql_socket_alt
uaktualnieniu miałem również tajemniczy folder, ale właśnie go usunąłem i utworzyłem/var/pgsql_socket
zgodnie z sugestią @wolftron. Nie było to jednak ostateczne rozwiązanie.Gdybym pozostawił
unix_socket_directory
puste / skomentowane wpostgresql.conf
, wszelkie projekty istniejące przed aktualizacją skarżyłyby się na/var/pgsql_socket
brakujące gniazdo . Ale gdybym zmienił conf i zakodował na stałevar/pgsql_socket
, wszelkie nowe projekty narzekałyby na brak gniazda/tmp
. Bardzo frustrujące ... dopóki nie zainstalowałem ponowniepg gem
w projekcie wcześniejszym niż 10.8 (gem uninstall pg && gem install pg
) i nieunix_socket_directory
skomentowałem wconf
pliku. Po szybkimpg_ctl
zrestartowaniu serwera działały zarówno nowe, jak i stare projekty. Moje gniazdo pgsql/tmp
już istnieje, fwiw.Uwaga: jeśli używasz
activerecord-postgresql-adapter
klejnotu, najpierw go odinstaluj, a następnie ponownie zainstaluj pg, a następnie zainstalujactiverecord-postgresql-adapter
ponownie.źródło
Właśnie zarejestrowałem się w dba SE, więc nie wydaje mi się, aby móc komentować odpowiedni post (co za bzdura!).
Byłem jednak pewien, że byłem na tej samej łodzi co @ thure. Bym upewnił / usr / local / bin został wcześniej niż w moim PATH / usr / bin, który sprawdził binarne powłoka miał mieszany z
which
itype
itpWidziałem te same objawy, co @ture. Potem miałem objawienie; Uświadomiłem sobie, że odbudowałem
pg
klejnot (używam Ruby) w powłoce, na PATH niekorzystnie wpłynął path_helper Maca (który jest uruchamiany z / etc / profile i umieszcza / usr / bin przed / usr / local / bin) .Odinstalowałem pg i ponownie zainstalowałem go w powłoce, której ŚCIEŻKA była poprawna. Nagle mogłem się połączyć!
Upewnij się więc, że ponownie skompilujesz swoje powiązania językowe i pozwól im znaleźć poprawną kopię (prawdopodobnie)
pg_config
.źródło
Znalazłem tę odpowiedź: https://stackoverflow.com/questions/10763143/in-rails-couldnt-create-database-for-adapter-postgresql I, choć było to proste, działało dla mnie ... uruchomiłem
$bundle update
i zaczęło działać ponownie.źródło
Przekonałem się, że symlinkowanie rzeczywistej lokalizacji do oczekiwanej lokalizacji działa dobrze:
zgodnie z przyjętą odpowiedzią @, ale prostsze.
źródło
Oto rok 2016, El Capitan jest na rynku, a Apple ciągle coś zmienia. Postgres jest instalowany jako część systemu operacyjnego, a plik konfiguracyjny postgres ustawia właściwość unix_socket_directories w postgresql.conf na / tmp. Gniazdo znajduje się w /tmp/.s.PGSQL.5432. Byłem w stanie obejść ten problem, wykonując następujące czynności:
Mam nadzieję, że to komuś pomoże.
źródło
Poszukaj poprawnego pliku gniazda
Z wyniku uzyskaj ścieżkę do pliku i użyj ścieżki z parametrem „-h” w komendzie psql
Na przykład w ten sposób łączę się z bazą danych kalendarza i kontaktów serwera macOS (w ramach sesji ssh z serwerem):
Następnie do połączenia wykorzystany zostanie plik gniazda przy ścieżce.
źródło
Domyślnie postgres wydaje się próbować połączyć przez gniazda domeny unix. GNIAZDO DOMENOWE UNIX
Zdarzyło mi się to, gdy uruchomiłem instancję postgres w oknie dokowanym. Musisz zobaczyć, jaki rodzaj połączenia akceptuje Twój serwer. Dla mnie było to wyraźnie TCP, a nie unixowe gniazdo domeny.
Dodanie flagi, aby zaakceptować host przekierowało połączenie do poprawnej ścieżki i rozwiązało problem.
PS: Gniazda domen Unix działają na poziomie jądra, a połączenie nie musi przejść całego jazzu wymaganego do połączeń TCP. Są dość szybkie i wydajne, gdy chcesz nawiązać połączenie z własną maszyną na podstawie innego procesu w ramach komunikacji międzyprocesowej.
źródło
Witaj świecie :)
Najlepszym, ale dziwnym sposobem dla mnie było robienie kolejnych rzeczy.
1) Pobierz postgres93.app lub inną wersję. Dodaj tę aplikację do folderu / Applications /.
2) Dodaj wiersz (polecenie) do pliku
To droga do.bash_profile
(który znajduje się w moim katalogu domowym):psql
zPostgres93.app
. Wiersz (polecenie) jest uruchamiany przy każdym uruchomieniu konsoli.3) Uruchom
Postgres93.app
z/Applications/
folderu. Uruchamia serwer lokalny (port to „5432”, a host to „localhost”).4) Po tych wszystkich manipulacjach z przyjemnością uruchomiłem
$ createuser -SRDP user_name
inne polecenia i zobaczyłem, że zadziałało!Postgres93.app
może być uruchamiany przy każdym uruchomieniu systemu.5) Również jeśli chcesz zobaczyć swoje bazy danych graficznie, powinieneś zainstalować
PG Commander.app
. To dobry sposób, aby zobaczyć swoją bazę danych postgres jako ładne tabele danychOczywiście jest to przydatne tylko dla lokalnego serwera. Będę zadowolony, jeśli te instrukcje pomogą innym, którzy napotkali ten problem.
źródło
Nie mogę szybko znaleźć linku, w którym znalazłem ten samorodek, ale zadziałało to dla mnie.
eksport PGHOST = localhost
Och, oto link. https://stackoverflow.com/questions/13868730/socket-file-var-pgsql-socket-s-pgsql-5432-missing-in-mountain-lion-os-x-ser
źródło
Ten sam błąd wystąpił podczas próby uruchomienia
psql
w wierszu polecenia. Okazało się, że moje rozwiązanie było znacznie prostsze. Źle skonfigurowałem port nasłuchujący w pliku konfiguracyjnym: /etc/postgresql/9.4/main/postgres.conf . Zmieniłem port z portu = 5432 na port = 5433. Kiedy zmieniłem go z powrotem na 5432, działał zgodnie z oczekiwaniami.Aby sprawdzić, czy zrobiłeś coś podobnego, możesz uruchomić
$ psql -p5433
Istnieje wiele przydatnych opcji takich jak ta dla komendy psql, które można znaleźć tutaj: http://www.postgresql.org/docs/9.4/static/app-psql .html , abyś mógł przetestować swoją własną błędną konfigurację. Oczywiście możesz po prostu usunąć ostatni zestaw zmian konfiguracji również z plików * .conf, aby sprawdzić, czy to one są przyczyną Twojego problemu. Myślę, że z pewnością warto to sprawdzić, zanim przejdziesz z uprawnieniami do plików i prawami własności. (Tylko nie zapomnij/etc/init.d/postgresql restart
)NIE mogłem znaleźć pliku konfiguracyjnego, który ustawia wartości domyślne dla komendy CLI psql. Czy ktoś może to skomentować?
Dla mnie zawsze wracam do mojej pierwszej zasady programowania: „Zwykle jestem źródłem każdego błędu!”
źródło