Errore PostgreSQL "Impossibile connettersi al server: nessun file o directory di questo tipo"


136

Come alcuni altri, ricevo questo errore quando eseguo rake db: migrare nel mio progetto o anche provare la maggior parte delle attività del database per le mie applicazioni Ruby on Rails 3.2.

PGError (impossibile connettersi al server: nessun file o directory. Il server è in esecuzione localmente e accetta connessioni sul socket del dominio Unix "/tmp/.s.PGSQL.5432"?

Ho installato PostgreSQL con Homebrew molto tempo fa e in seguito a un tentativo di installazione di MongoDB recentemente la mia installazione di PostgreSQL non è mai stata la stessa. Sto eseguendo OS X v10.6 Snow Leopard.

Cosa c'è che non va e come posso capire meglio come PostgreSQL è e deve essere configurato sul mio Mac?

Finora (penso) questo mi dice che PostgreSQL non è in esecuzione (?).

ps -aef|grep postgres                                                                                                   (ruby-1.9.2-p320@jct-ana) (develop) 
  501 17604 11329   0   0:00.00 ttys001    0:00.00 grep postgres

Ma questo mi dice che PostgreSQL è in esecuzione?

 launchctl load -w /usr/local/Cellar/postgresql/9.1.4/homebrew.mxcl.postgresql.plist                                                        (ruby-1.9.2-p136) 
homebrew.mxcl.postgresql: Already loaded

Come posso risolvere questo problema? cosa non vedo?

PS: ~/Library/LaunchAgentsinclude due file .plist PostgreSQL. Non sono sicuro che sia pertinente.

org.postgresql.postgres.plist
homebrew.mxcl.postgresql.plist

Ho provato quanto segue e ho ottenuto un risultato come di seguito.

$ psql -p 5432 -h localhost

psql: could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (fe80::1) and accepting
    TCP/IP connections on port 5432?

Ho letto che ciò accade perché OS X installa la propria versione di PostgreSQL e Homebrew installa una versione diversa in un posto diverso e i comandi PostgreSQL stanno cercando nella directory / tmp /. Avrai bisogno di cercare di più su Stack Overflow, ma fondamentalmente link simbolico PostgreSQL in modo che tutto ciò che cerca in quel percorso tmp trovi effettivamente il vero percorso, se questo ha senso.

Questo è il link in cui ho trovato alcune altre cose da provare, in particolare facendo il collegamento simbolico come sopra, Mac OSX Lion Postgres non accetta connessioni su /tmp/.s.PGSQL.5432 . Vorrei ancora che qualcuno mettesse insieme una spiegazione decente dei concetti alla base dell'installazione di PostgreSQL su OS X e del perché sia ​​così difficile.

Informazioni più recenti per la risoluzione dei problemi:

$ which psql // This tells you which PostgreSQL you are using when you run $ psql. 

Quindi eseguire:

$ echo $PATH

La cosa chiave da prendere in considerazione è questa:

Assicurarsi che la voce del percorso per la copia di PostgreSQL che si desidera eseguire venga PRIMA del percorso del PostgreSQL del sistema OS X.

Questo è un requisito fondamentale che decide quale PostgreSQL viene eseguito ed è ciò che mi viene detto che porta alla maggior parte di questi problemi.


Hai mai trovato una soluzione per questo? Vedo che non ne hai segnato uno. Nessuno di questi mi aiuta neanche.
Andras Gyomrey,

È ancora principalmente vodoo e strane incarnazioni per farlo funzionare. Ho appena aggiunto [Modifica 2] sopra con un link con alcuni altri suggerimenti e come fare il link simbolico secondo i miei commenti di modifica. Il Symlink ha funzionato per me alla fine, ma penso di aver disinstallato e reinstallato anche postgres e homebrew lungo la strada, così difficile sapere esattamente cosa ha fatto la differenza. In bocca al lupo. Segnala se scopri qualcosa di nuovo, con 15.000 visualizzazioni su questa domanda è qualcosa che fa soffrire molte persone!
Evolve il

@AndrasGyomrey Sono appena tornato da RailsCamp15 in Australia e la gente ha detto che una chiave era per ottenere il file del percorso giusto, ho modificato in Modifica 3 sopra per spiegarlo.
Evolve

Tieni presente che launchctl che segnala qualcosa come caricato NON significa necessariamente che sia attivo e funzionante. Dovresti dare un'occhiata a bigsql.com in alternativa; funziona su Mac e ha una buona interfaccia utente di gestione.
Jim Nasby,

Risposte:


102

Controlla che non ci sia postmaster.pid nella tua directory postgres, probabilmente /usr/local/var/postgres/

rimuovilo e avvia il server.

Controlla - https://github.com/mperham/lunchy è un ottimo wrapper per launchctl.


3
Questo ha funzionato per me. Ho appena installato yosemite e caricato postgres da homebrew. Ha funzionato bene la prima volta che l'ho usato, ma ho avuto questo problema dopo un riavvio. Quindi, puoi spiegare perché ha funzionato?
Dan Williams,

2
ha funzionato per me, ma per i neofiti, qualcuno può spiegare perché e quanto sia sicuro
Alexander Mills,

58

" Postgres.app " è una soluzione migliore se sei su OS X.


Ecco la soluzione:

  1. Ferma il database
  2. cd /var
  3. rm -r pgsql_socket
  4. ln -s /tmp pgsql_socket
  5. chown _postgres:_postgres pgsql_socket
  6. Riavvia PostgreSQL (non il tuo computer)

Maggiori informazioni sono disponibili su " postgresql 9.0.3. Su Lion Dev Preview 1 ".


2
Gli errori tornano per me e questa correzione non ha aiutato. Mi sento come se stessi sbattendo in una stanza buia nel lavoro per capire cosa sta realmente succedendo e un processo per applicare una correzione da solo. Sarebbe possibile per te spiegare come potrei diagnosticare e risolvere questo problema?
Evoluzione

Per me va bene. Sembra un po 'strano /tmpvestire _postgres, ma hey :)
wrdevos,

Postgresapp funziona, ma perché non riesco ad avviare il mio server nel terminale? Dopo aver chiuso questa app, il problema ritorna come previsto.
Hakunami,

Questo ha funzionato per me, ma nota che devi essere root o usare sudo per eseguire il # 2 - 4. Inoltre, chiarisci il passaggio 5 - devi solo riavviare postgres, non il computer.
Mpelzsherman,

2
Le lettere maiuscole non danno una risposta migliore. È ancora perfettamente corretto installare ed eseguire Postgres tramite Homebrew (servizi.)
Drenmi,

55

Per me funziona

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

9
Nel mio caso, dopo aver eliminato il pid, ho dovuto riavviare postgresql conpg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Obromios,

4
Ho anche dovuto riavviare Postgres, quando installato da Homebrew, puoi farlo in questo modo:brew services restart postgresql
santuxus

2
Sono nel docker env No such file or directorynel mio caso
Sarz,

2
rm: /usr/local/var/postgres/postmaster.pid: nessun file o directory
simile

13

Questo ha funzionato per me per l'errore che hai citato. Fai una di queste:

  1. Eventualmente modificare la porta predefinita specificata nel postgres.conffile, se 5432durante l'installazione è stato utilizzato qualcosa di diverso dalla porta predefinita .

  2. Modificare il numero di porta postgresql.confe riavviare il server DB.

  3. Invece di psqldigitare il comando completo:

    psql -p 5432 -h localhost   
    • nome del server e numero della porta

1. Penso che la mia installazione sarebbe stata come da impostazioni predefinite.
Evolve il

2. Potrei cambiarlo, ci sono implicazioni nel cambiare la porta?
Evoluzione

3. Aggiunto il mio output da 3 sopra.
Evolve il

L'opzione 3 ha funzionato con la porta personalizzata. Poiché ho installato più server PG (PostgreSQL 9.1, 9.2 e 9.3), dovevo anche puntare al psql giusto.
gpasse,

11

Se usi Homebrew, disinstalla Postgresql end pg gems: *

$ gem uninstall pg
$ brew uninstall postgresql

Scarica ed esegui il seguente script per correggere l'autorizzazione su / usr / local: * https://gist.github.com/rpavlik/768518

$ ruby fix_homebrew.rb

Quindi installare nuovamente Postgres e pg gem: *

$ brew install postgresql  
$ initdb /usr/local/var/postgres -E utf8

Per avviare launchd avviare postgresql all'avvio eseguito:

$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents 

Oppure avvia manualmente.

Installa pg gem

$ gem install pg

Spero di aver aiutato


Da brew info postgres:ARCHFLAGS="-arch x86_64" gem install pg
wrdevos,

1
questo non eliminerebbe i record nel db?
Kibaekr,

initdb /usr/local/var/postgres -E utf8lavori. Grazie mille.
Chris Jeon,

8

Ho avuto questo problema quando ho aggiornato Postgres a 9.3.x. La soluzione rapida per me è stata il downgrade a qualsiasi versione 9.2.x che avevo prima (non è necessario installarne una nuova).

$ ls /usr/local/Cellar/postgresql/
9.2.4
9.3.2
$ brew switch postgresql 9.2.4
$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
<open a new Terminal tab or window to reload>
$ psql

" Homebrew installa una versione specifica della formula? " Offre una spiegazione molto più completa insieme a modi alternativi per risolvere il problema.


Grazie per il contributo e istruzioni chiare per ripetere la correzione. Quel link che hai incluso è sicuro, al momento non ho problemi con Postgres, quindi non sono sicuro di quanto sia utile per gli altri, ma per chiunque altro se lo trovi utile, per favore commenta qui.
Evolve il

Lo trovo utile e pertinente, anche se forse non direttamente. Ha risolto il problema semplicemente cambiando versione, usando brew, che è uno strumento abbastanza comune, e ha appena ripetuto i passaggi, finora, ottimo, il collegamento entra in più problemi specifici della birra, tuttavia, quindi posso vedere le tue domande sul suo valore nel contesto della domanda del PO.
wkhatch,


5

Quindi, per molti dei problemi qui, sembra che le persone stessero già eseguendo psql e dovessero essere rimosse postmaster.pid. Tuttavia, non ho avuto questo problema in quanto non avevo mai installato correttamente Postgres nel mio sistema.

Ecco una soluzione che ha funzionato per me in Yosemite MAC OSX

  1. Sono andato su http://postgresapp.com/ e ho scaricato l'app.
  2. Ho spostato l'app nella directory Applicazione /
  3. L'ho aggiunto a $ PATH aggiungendo questo a .bashrc o .bash_profile o .zshrc: export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
  4. Ho eseguito i postgres dalla directory Applicazioni, ho eseguito nuovamente il comando e ha funzionato.

Spero che questo ti aiuti! Toodles!

Inoltre, questa risposta mi ha aiutato di più: https://stackoverflow.com/a/21503349/3173748


Questo non punta all'app Postgres piuttosto che all'installazione della birra? Questo può tagliarti fuori da alcuni pacchetti utili (pgrouting per esempio, che non puoi installare per l'app Postgres che mi ha causato un dolore infinito ed eccomi ora)
allthesignals

4

Quando si esegue: psql -p 5432 -h localhost non utilizza il driver di loopback ma utilizza un socket reale e quindi è necessario configurare Postgres per accettare le connessioni socket. Quindi, anche se pgadmin e altri client potrebbero funzionare, psql no.

È necessario modificare sia il file postgresql.conf che i file pg_hba.conf in modo da consentire la connessione su un socket reale. Ciò consentirà anche la connessione da un IP remoto, motivo per cui è disabilitato per impostazione predefinita.

Questi file si trovano nella directory dei dati ma la posizione effettiva può essere diversa a seconda di come è stato installato Postgres. Con postgres in esecuzione, esegui il comando:

ps -ef | grep postmaster

Questi due file sono la directory -D (forse / usr / local / pgsql / data).

Per il file postgresql.conf, decommentare il file hear_address e modificarlo in:

listen_address = '*'

Per pg_hba.conf aggiungi la riga:

host all all 0.0.0.0/0 md5

2

Non conosco davvero Mac o Homebrew, ma conosco molto bene PostgreSQL.

Volete capire da dove provengono i log di PostgreSQL che tenta di avviarsi e qual è la directory socket per PostgreSQL. Per impostazione predefinita quando si crea PG, la directory socket è / tmp /. Se non lo hai cambiato quando hai creato PG e poi hai avviato PG, dovresti essere in grado di vedere un file socket in / tmp se lo fai: ls -al / tmp

Il file socket inizia con un ".", Quindi non lo vedrai con '-a' a ls.

Se non vedi un socket lì, e non vedi nulla da ps awux | grep postgres, quindi PG probabilmente non è in esecuzione, o forse lo è ed è quello installato su OSX. Ciò che potrebbe accadere è che potresti avere un conflitto durante l'ascolto sulla porta 5432 su localhost- usa netstat -anp per vedere cosa, se non altro, sta ascoltando su 5432. Se un PG Mac OSX sta già ascoltando su quella porta, allora potrebbe essere il problema.

Spero che aiuti. Ho sentito che l'homebrew può rendere le cose un po 'brutte e molte persone con cui ho parlato per incoraggiare l'uso di una VM.


Grazie per aver contribuito a questo. Se ti aiuta a dare un po 'più di background, homebrew esegue semplicemente questo script durante l'installazione di Postgres. github.com/Homebrew/homebrew-core/blob/master/Formula/… Spero che tu possa dare un'occhiata e possibilmente condividere ulteriori approfondimenti da ciò che trovi. Ciò di cui penso che le persone abbiano bisogno è un modo più semplice per eseguire il debug del motivo per cui ricevono questo errore in modo che sappiano quali azioni intraprendere.
Evolve il

Sulla base di ciò che posso capire di quello script, c'è un "postgres.log" in una directory "var", possibilmente sotto HOMEBREW_PREFIX. Quel file di registro conterrà informazioni su PG che tenta di avviarsi (anche se non è stato possibile avviarlo per qualche motivo). Ecco un messaggio di esempio che mostra che PG non si avvia a causa di un altro processo in ascolto sulla porta 5432:
Stephen Frost,

19-12-2016 09: 11: 59.582 EST [20669] LOG: impossibile associare il socket IPv4: indirizzo già in uso 19-12-2016 09: 11: 59.582 EST [20669] SUGGERIMENTO: un altro postmaster è già in esecuzione sulla porta 5432 ? In caso contrario, attendere qualche secondo e riprovare. 19-12-2016 09: 11: 59.582 EST [20669] ATTENZIONE: impossibile creare socket di ascolto per "localhost" 19/12/2016 09: 11: 59.582 EST [20669] FATAL: impossibile creare socket TCP / IP 2016 -12-19 09: 11: 59.582 EST [20669] LOG: il sistema di database è spento
Stephen Frost,

Inoltre, sembra che lo script non cambi la directory socket predefinita, quindi dovrebbe essere / tmp /. È possibile cercare nella directory dei dati PG (che sembra essere {HOMEBREW_PREFIX} / var / postgres) per il file postgresql.conf e cercare "unix_socket_directories". È commentato per impostazione predefinita ma ha l'impostazione predefinita, ad esempio:
Stephen Frost,

#unix_socket_directories = '/ tmp' # elenco separato da virgole di directory
Stephen Frost

2

Ho riscontrato questo errore durante l'esecuzione su Mac 10.15.5 usando homebrew.

Esiste un file chiamato postmaster.pid che dovrebbe essere automaticamente eliminato all'uscita da postresql.

In caso contrario, procedere come segue

  • i servizi di infusione fermano postgresql <--- Se non si riesce ad uscire prima che rm possa corrompere db
  • sudo rm /usr/local/var/postgres/postmaster.pid


1

Uno dei motivi per cui viene visualizzato questo errore è che il database Postgres locale si arresta al riavvio del computer. In una nuova finestra del terminale, digitare semplicemente:

$psql -h localhost 

per riavviare il server.


1

Ciao mondo :)
Il modo migliore ma strano per me era fare le prossime cose.

1) Scarica postgres93.app o altra versione. Aggiungi questa app nella cartella / Applicazioni /.

2) Aggiungi una riga (comando) nel file .bash_profile(che si trova nella mia home directory):

export PATH = / Applicazioni / Postgres93.app / Contenuti / MacOS / bin /: $ PATH
È un PERCORSO psqlda Postgres93.app. La riga (comando) viene eseguita ogni volta che viene avviata la console.

3) Avvia Postgres93.appdalla /Applications/cartella. Avvia un server locale (la porta è "5432" e l'host è "localhost").

4) Dopo tutte queste manipolazioni sono stato felice di eseguire $ createuser -SRDP user_namee altri comandi e vedere che ha funzionato! Postgres93.apppuò essere fatto funzionare ad ogni avvio del sistema.

5) Inoltre, se si desidera visualizzare graficamente i database, è necessario installarli PG Commander.app. È un buon modo di vedere il tuo DB postgres come tabelle dati piuttosto carine

Naturalmente, è utile solo per il server locale. Sarò felice se queste istruzioni aiuteranno gli altri che hanno affrontato questo problema.


1

Avevo PostgreSQL 9.3 e ho avuto lo stesso errore,

Impossibile connettersi al server: connessione rifiutata Il server è in esecuzione sull'host "localhost" (127.0.0.1) e accetta connessioni TCP / IP sulla porta 5432?

Ho risolto usando:

chmod 777  /var/lib/pgsql/9.3/data/pg_hba.conf 
service postgresql-9.3 restart

Per me funziona.


Questo file non esiste per me
segnali il

1

per quello che vale, ho riscontrato questo stesso errore quando ho avuto un refuso ( md4anziché md5) nel mio pg_hba.conffile ( /etc/postgresql/9.5/main/pg_hba.conf)

Se sei arrivato qui come ho fatto, ricontrolla quel file una volta per assicurarti che non ci sia nulla di ridicolo.


dov'è il pg_hba.conffile?
bubakazouba,

1
/etc/postgresql/{postgres_version}/main/pg_hba.conf
Aidan Melen

0

Potrebbero esserci diversi problemi con l'esecuzione di PostgreSQL localmente. Consiglierei di pulire tutte le versioni di Postgres installate e ricominciare da capo. Una volta installato, è molto semplice ricreare il database se il progetto di rotaie è aggiornatodb/schema.rb

Ecco come di solito installo PostgreSQL su un Mac . Se stai eseguendo il tuo database sotto l'utente root localmente, potresti voler omettere l'ultimo passaggio che crea un todoutente


0

Uno dei motivi potrebbe essere quello

unix_socket_directories nel file postgresql.conf non è elencato con la directory che sta cercando.

Nell'esempio della domanda cerca directory / tmp che deve essere fornito nel file postgresql.conf

qualcosa come questo:

unix_socket_directories = '/var/run/postgresql,/tmp'    # comma-separated list of directories

Questa soluzione ha funzionato per me.


0

Se sei su MacOS e usi l'homebrew ho trovato questa risposta estremamente utile:

https://stackoverflow.com/a/27708774/4062901

Per me, il mio server era in esecuzione ma a causa di un aggiornamento avevo problemi di connessione (nota: utilizzo i servizi brew). Se Postgres è in esecuzione, prova a cat /usr/local/var/postgres/server.logvedere cosa dicono i registri. Il mio errore era una migrazione, non un problema di connessione.

Anche dopo la migrazione manuale che propongono (che funziona ma) ho scoperto che non c'era più una tabella per il mio utente. Prova questo comando per risolvere il problema: createdb(risposta tramite psql: FATAL: il database "<utente>" non esiste )


0

Riavvia Postgres non appena viene visualizzato l'errore eseguendo brew services restart postgresqle poi riprova


0

per me il comando rm /usr/local/var/postgres/postmaster.pidnon ha funzionato perché ho installato una versione specifica di postgresql con homebrew.

il comando giusto è rm /usr/local/var/postgres@10/postmaster.pid.

allora brew services restart postgresql@10.


-5

È molto semplice. Aggiungi host solo nel tuo file database.yaml.


host: 127.0.0.1 o host: localhost per esempio.
Ricardo - Nextv

Tutti amano una soluzione semplice. Ma come funziona? Come ho detto nei miei commenti sopra, la ricerca su questo mi ha portato lungo molte rotte complesse. Puoi spiegarci un po 'e darci un po' più di sfondo su ciò che vedi davvero il problema e su come questa semplice modifica risolve il problema. Grazie per aver contribuito a questo! :)
Evolve il

La differenza è con una connessione IP non c'è da preoccuparsi di dove si trova il file socket; invece ti preoccupi per l'indirizzo IP.
Jim Nasby,
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.