Riparare Postgresql dopo l'aggiornamento a OSX 10.7 Lion


196

Di recente ho eseguito l'aggiornamento a OSX 10.7, a quel punto l'installazione della mia rotaia si è completamente bloccata quando ho provato a connettermi al server psql. Quando lo faccio dalla riga di comando utilizzando

psql -U postgres

funziona perfettamente, ma quando provo a eseguire il server rails 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 di grande aiuto! Grazie!


Questo ha colpito anche qualcuno nel mio ufficio; abbiamo avuto un problema simile con il recupero del file binario sbagliato, un ulteriore problema con il tentativo di connettersi ai socket di dominio in una directory diversa con autorizzazioni diverse e sembra che l'aggiornamento abbia mangiato tutti i dati sul database locale. Fortunatamente questa era solo una scatola di sviluppo, quindi non è un grosso problema, ma leggermente odiosa. :)

1
L'ho colpito io stesso oggi e mi sono ricordato di aver letto la tua domanda ieri. È bello vedere che John Wang è uscito e l'ha spiegato :)
Ryan Bigg,

Risposte:


291

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

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

come prima esportazione per PATHpoi chiudere la sessione della shell o source ~/.bash_profileeseguire il sorgente del file e ora dovrebbe essere nuovamente OK.


12
Questo l'ha risolto. Puoi anche modificare / etc / percorsi e assicurarti che / usr / local / bin sia in alto
Greg

153
Inoltre, nota che se hai installato pg gem PRIMA di correggere il tuo percorso, utilizzerà psql errato. In tal caso, disinstallare pg gem e quindi reinstallarlo (gem Uninstall pg && gem install pg).
Troia,

4
Questo è per l'homebrew? Ports sembra metterlo in: / opt / local / lib / postgresql91 Quindi assicurati di usare export PATH = / opt / local / lib / postgresql91 / bin: $ PATH
Antony Stubbs

1
Il mio percorso stava riportando correttamente, ma la soluzione di Troy di disinstallare la gemma pg, quindi lasciare che il bundler reinstallasse ha fatto il trucco per me.
Tom Harrison,

2
Giusto per chiarire - sembra che tu sia meglio impostare correttamente il tuo percorso, quindi disinstallare / reinstallare la gemma pg
Jamie Cook

90

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 sugo.


9
fai attenzione: questa impostazione cambia l'accesso dal socket del dominio a una connessione TCP. Anche se probabilmente funziona, potresti perdere un po 'di prestazioni e porte utilizzabili sul tuo computer, il che può essere un problema a seconda della configurazione. La soluzione fornita da John è corretta.
pilif,

3
'gem uninstall pg' (scegli tutte le versioni), quindi 'bundle' di nuovo per installare la versione pg dal tuo Gemfile ha funzionato per me.
tmadsen,

Grazie Dave G, ha funzionato anche per me. Ho installato l'aggiornamento 10.7.3 e il rake db: migrate lamentato. Questo l'ha risolto.
Sathish,

Questo ha funzionato anche per me. Tuttavia ho lasciato vuota la password e il nome utente.
Benjamin,

Immagino che funzionerebbe perché forza una connessione TCP / IP.
duma,

46

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

Verifica dove si trova l'obiettivo effettivo:

sudo find / -name .s.PGSQL.5432

Avevo bisogno di creare questa directory:

mkdir /var/pgsql_socket/

Quindi usando il risultato della ricerca sopra crea questo link simbolico:

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

Ho il sospetto che per la maggior parte delle persone su Mountain Lion puoi semplicemente creare la directory e fare il collegamento simbolico e non perdere tempo facendo la ricerca a meno che il collegamento simbolico non funzioni.

PS: il mio PostgreSQL è stato installato tramite il programma di installazione ufficiale.


Ho la sensazione che potrebbe essere per me, ma non riesco a farlo funzionare. Sto ottenendo questo: ln: / var / pgsql_socket /: nessun file o directory simile
Emmanuel,

Scusa, ho dimenticato di essermi imbattuto anche in quello. Aggiunto ulteriore passaggio per rispondere.
Ben

Ti benedica Ben. Molto apprezzato.
Matt

29

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 gemma pg stessa. Quando si crea, capisce dove dovrebbe essere il socket del dominio. Se si modifica la posizione del socket del dominio dopo il fatto, sembra che non abbia effetto fino a quando non si ricostruisce la gemma.


Questo ha funzionato per me, anche dopo aver riparato il PERCORSO e reinstallato la gemma PG senza condizioni.
Elliot Winkler,

Grazie per questo consiglio, Darren
bhinks il

15

Per coloro che hanno installato direttamente dal programma di installazione ufficiale, basta aggiungere l'host al comando senza cambiare il percorso:

psql -h localhost -U postgres

5

Ho avuto lo stesso problema e ho avuto problemi a far funzionare la soluzione di John Wang. Come ha notato Darren, c'è un problema con la gemma PG. Per farlo funzionare ho dovuto:

gem uninstall pg

Quindi reinstallare.

Che ha funzionato.


Ho dovuto correre questo due volte ... strano. Ho disinstallato pg, quindi bundle install e non è riuscito. Quindi gem ha appena installato pg e ha funzionato. Grazie!
Dustin,

3

Mi sono imbattuto anche in questo, ma avevo installato Postgres da solo (non con l'homebrew). In questo 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

(after) `which psql '=> / usr / local / psql / bin

Il suggerimento di John Wang di source ~/.bash_rcaggiungere successivamente a bash_rc è d'oro.



1

Non sono contento delle risposte più votate in quanto sono specifiche dell'utente del sistema operativo o rimappano Postgres per utilizzare TCP anziché i socket di dominio, come sottolineato da @pilif. Ho visto un'altra soluzione che prevede il riordino dei percorsi predefiniti a livello di sistema per verificare il percorso di Brew prima di un percorso di sistema di base, ma questo sembra pericoloso in quanto potrebbe influire su tutte le altre collisioni di nomi di applicazioni come questa.

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

  1. eseguire il backup dei file Postgres 8.4 in una directory separata
  2. link simbolico all'installazione della birra di Postgres in atto

Questo viene fornito con l'avvertenza che Postgres di default di sistema è qualunque sia la birra installata, quindi devi fare un giudizio sul fatto che sia giusto per te. Non mi vedo bisogno di Postgres 8.4 in particolare su 9.x, ma YMMV


1

Un'altra possibile soluzione che ha funzionato per me è reimpostare il file postmaster eliminandolo. Esegui semplicemente:

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 riscontrando era:

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

Dopo tutto ha funzionato alla grande.


Ho avuto il problema solo dalla riga di comando. La rimozione del file /usr/local/var/postgres/postmaster.pid ha risolto il mio problema.
Michael A.

0

Nel mio caso il server non si è 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 postmasterprocessi!

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



0

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.


0

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

host: localhost

port: 5432

Non sono sicuro del motivo per cui Rails si imposta per impostazione predefinita sui socket di dominio anziché su TCP, mentre PostgreSQL non imposta i socket di dominio per impostazione predefinita.


0

Il mio PostgreSQL è installato in / Library / PostgreSQL in modo che le cose / usr / var non funzionassero per me.

Sembra che Woz abbia ragione perché ogni volta che chiudo il coperchio del mio macbook pro si blocca ... Ecco cosa ha funzionato dopo l'incidente per me:

sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.