Riparazione di Postgresql dopo l’aggiornamento a OSX 10.7 Lion

Di recente ho eseguito l’aggiornamento a OSX 10.7, a quel punto l’installazione del mio bails è stata completamente bloccata durante il tentativo di connessione al server psql. Quando lo faccio dalla riga di comando utilizzando

psql -U postgres 

funziona perfettamente, ma quando provo a eseguire il server o la console con lo stesso nome utente e password, ottengo questo errore

 ...activerecord-3.0.9/lib/active_record/connection_adapters/postgresql_adapter.rb:950:in `initialize': could not connect to server: Permission denied (PGError) Is the server running locally and accepting connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"? 

Qualsiasi idea su cosa potrebbe succedere sarebbe super utile! Grazie!

È un problema PATH. Mac OSX Lion include ora Postgresql nel sistema. Se fai un which psql , probabilmente vedrai usr/bin/psql invece di usr/local/bin/psql che è quello corretto di HomeBrew. Se brew doctor dovresti ricevere un messaggio che indica che devi aggiungere usr/local/bin alla testa della tua variabile env PATH.

Modifica di .bash_profile o .profile o di qualsiasi shell che stai utilizzando e aggiungendo: export PATH=/usr/local/bin:$PATH

come prima esportazione per il PATH quindi esci dalla sessione shell o dai il tuo source ~/.bash_profile con source ~/.bash_profile e ora dovrebbe essere di nuovo OK.

Per quelli di voi che sono interessati, ho messo insieme la soluzione. Tutto ciò di cui avevo bisogno era aggiungere

 host: localhost 

al database.yml per il mio ambiente e tutto era salato.

Ho avuto questo problema con Mountain Lion ma l’unica cosa che ha funzionato per me è stata questa correzione :

Controlla dove si trova il vero objective:

 sudo find / -name .s.PGSQL.5432 

Ho bisogno di creare questa directory:

 mkdir /var/pgsql_socket/ 

Quindi, utilizzando il risultato della ricerca sopra, crea questo link simbolico:

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

Sospetto che per la maggior parte delle persone su Mountain Lion puoi semplicemente creare la dir e fare il symlink e non perdere tempo a fare la ricerca a meno che il link simbolico non funzioni.

PS: il mio PostgreSQL è stato installato tramite l’installer ufficiale.

Se il problema persiste dopo aver cambiato il percorso (come ha fatto per me), prova anche questo …

 gem pristine pg 

Sembra che il problema (parzialmente) risieda nella gem stessa. Quando costruisce, capisce dov’è il socket del dominio. Se cambi la posizione del socket del dominio dopo il fatto, non sembra che abbia effetto finché non ricostruisci la gem.

Per coloro che hanno installato direttamente dal programma di installazione ufficiale, è sufficiente aggiungere l’host al comando senza modifiche al percorso:

 psql -h localhost -U postgres 

Ho avuto lo stesso problema e stavo avendo problemi a far funzionare la soluzione di John Wang. Come notò Darren, c’è un problema con la gem pg. Per farlo funzionare avevo bisogno di:

 gem uninstall pg 

Quindi reinstallare.

Che ha funzionato.

Mi sono imbattuto in questo, ma avevo installato postgres me stesso (non con homebrew). Se questo è il caso, devi trovare il vecchio percorso di psql (che potrebbe essere / usr / local / bin, ma per me era / usr / local / pgsql / bin) e anteporre quello al tuo $ PATH.

(prima) which psql => / usr / bin / psql

(correzione) export PATH = / usr / local / psql / bin: $ PATH

(dopo) `which psql ‘=> / usr / local / psql / bin

Il suggerimento di John Wang di source ~/.bash_rc seguito lo aggiungi al tuo bash_rc che è d’oro.

È per l’homebrew? Ports sembra metterlo in:

 /opt/local/lib/postgresql91 

Quindi assicurati di utilizzare l’esportazione

 PATH=/opt/local/lib/postgresql91/bin:$PATH 

Problema relativo alle porte Mac: https://trac.macports.org/ticket/30125

Non sono soddisfatto delle risposte più aggiornate perché sono specifiche per utente del sistema operativo o rimappano Postgres per usare TCP invece di socket di dominio, come indicato da @pilif. Ho visto un’altra soluzione che comporta il riordino dei percorsi predefiniti a livello di sistema per controllare il percorso di Brew prima di un percorso del sistema centrale, ma ciò sembra pericoloso poiché potrebbe influire su tutte le altre collisioni di nomi dell’applicazione come questa.

Questo sito descrive una soluzione trovata dal mio collega. Si tratta di eseguire uno script di shell singolo che lo farà

  1. eseguire il backup dei file Postgres 8.4 in una directory separata
  2. colbind simbolicamente l’installazione di Postgres della birra sul posto

Ciò viene fornito con l’avvertenza che il sistema predefinito Postgres è quello che brew ha installato, quindi devi fare una valutazione per stabilire se è giusto per te. Non vedo me stesso che abbia bisogno di Postgres 8.4 specificatamente su 9.x, ma YMMV

Un’altra ansible soluzione che ha funzionato per me è il ripristino del file postmaster cancellandolo. Basta eseguire:

 rm /usr/local/var/postgres/postmaster.pid 

Vale la pena controllare il registro per gli errori che puoi trovare qui:

 /usr/local/var/postgres/server.log 

Il messaggio di errore che stavo avendo era:

 FATAL: lock file "postmaster.pid" already exists HINT: Is another postmaster (PID 161) running in data directory "/usr/local/var/postgres"? 

Tutto ha funzionato alla grande in seguito.

Nel mio caso il server non è stato avviato a causa di impostazioni errate della memoria condivisa. All’inizio ero confuso perché c’erano diversi processi postgres in esecuzione, ma quelli erano processi di sistema standard. Cerca i processi postmaster !

Tutto quello che dovevo fare era cambiare le impostazioni della memoria condivisa . Nel mio caso non era necessario manipolare le impostazioni del percorso.

Potrebbe essere necessario specificare l’host del database.

Se ti piace un cambiamento permanente nel tuo $ PATH prova questo:

 defaults write $HOME/.MacOSX/environment PATH "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/opt/local/bin" 

questo riscriverà il tuo ~/.MacOSX/environment.plist .

Sono nuovo di Rails, ma aggiungendo quanto segue a database.yml ha funzionato per me:

 host: localhost port: 5432 

Non sono sicuro del motivo per cui Rails imposta i socket di dominio al posto di TCP, mentre PostgreSQL non imposta i socket di dominio per impostazione predefinita.

My PostgreSQL è installato in / Library / PostgreSQL in modo che / usr / var stuff non funzioni per me.

Sembra che Woz sia corretto perché ogni volta che chiudo il coperchio del mio MacBook si blocca … Ecco cosa ha funzionato post-crash per me:

 sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"