PostgreSQL funziona localmente ma non riesco a collegarmi. Perché?


32

Recentemente ho aggiornato la mia macchina da Mac OS X Lion (10.7.4) a Mountain Lion (10.8) e penso che abbia migliorato l'installazione di PostgreSQL. È stato installato originariamente tramite Homebrew. Non sono un DBA, ma spero che qualcuno possa dirmi come risolvere questo problema.

Non riesco a collegarmi (ma prima di pre-Mountain Lion ero in grado di):

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

Ma Postgres funziona ancora chiaramente:

$ 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

E sta rispondendo alle query (sia a un db di prova che a un db di sviluppo) da un'app Rails locale

  User Load (0.2ms)  SELECT "users".* FROM "users" 
  Rendered users/index.html.haml within layouts/application (1.3ms)

Sembra che non ci sia alcuna /var/pgsql_socket/directory, per non parlare del /var/pgsql_socket/.s.PGSQL.5432file socket menzionato sopra!?! Forse l'installazione di Mountain Lion lo ha cancellato?

$ ls -l /var/ | grep pg
drwxr-x---   2 _postgres  _postgres    68 Jun 20 16:39 pgsql_socket_alt

Come posso risolvere questo?


Non un amministratore postgres, ma un file socket mancante suona bene. Creare la directory / var / pgsql_socket (con l'utente che dispone delle autorizzazioni di scrittura) e riavviare il server. Vedi se questo risolve il problema
Derek Downey,

Domanda correlata su SO . Sembra che Apple non abbia fatto un ottimo lavoro con l'aggiornamento.
Erwin Brandstetter,

si fa menzione di un file socket creato nel file di registro /usr/local/var/postgres/server.log?
Philᵀᴹ

@ErwinBrandstetter Come pensi che Apple faccia un "buon lavoro" per l'aggiornamento delle app di terze parti * nix installate manualmente?
Philᵀᴹ

@ Phil- nessuna menzione. Sto iniziando a pensare che questo potrebbe essere un problema con variabili di percorso. Penso che il mio $PATHcambiamento con l'aggiornamento /usr/binsia in anticipo /usr/local/bine penso che Mountain Lion possa venire con PostgreSQL preinstallato!?! Indagare ...
Meltemi,

Risposte:


30

Ho scoperto di avere un problema estremamente simile, ovvero che Postgres stava aprendo un socket in /var/pgsql_socket_altcui nessuno dei miei software si aspettava di guardare, ma la soluzione al mio problema non era solo un problema con il mio $PATH.

Ho dovuto creare la directory /var/pgsql_socket, chown a me stesso, e set unix_socket_directoryin postgresql.conf(che si trova in /usr/local/var/postgres) a quella directory, quindi utilizzare il pg_ctlbinario /usr/local/binper avviare il server Postgres destra con successo (che è dove $PATHentra in gioco - Assicurarsi which pg_ctlrisolve a /usr/local/bin/pg_ctl, o semplicemente sempre chiamalo esplicitamente).

Questo potrebbe aiutare altri utenti che trovano questa domanda tramite la /var/pgsql_socket_altmenzione.


Interessante. Sei anche su Mountain Lion? Hai installato PostgreSQL con Homebrew? In tal caso, mi chiedo se qualcun altro può verificare questa soluzione anziché cambiare la mia $PATHcome ho fatto.
Meltemi,

Sì, sì, e lo spero!
Will

@wolftron la tua soluzione è stata eccezionale per me (Mountain Lion, homebrew / postgres, / var / pgsql_socket_alt, tutti e nove). È un nuovo numero di Mountain Lion con homebrew? Aprirò un biglietto con loro se lo pensi.

Sembra che abbiamo la verifica da @Jamie.
Sarà il

Posso confermare questo problema e la soluzione su OS X 10.8.2 / brew installazione di postgresql 9.2.1.
Hartwig,

8

Una spiegazione plausibile e tipica sarebbe che ciò psqlche viene fornito con l'homebrew è /usr/local/bin/psqldiverso da quello che si troverebbe nel tuo $ PATH, come /usr/bin/psql(in bundle con OS X). Puoi provare con il percorso completo:

$ /usr/local/bin/psql -U rails -d myapp_development

Inoltre, c'è qualcosa di piuttosto insolito psnell'output della tua domanda: il server Postgres è in esecuzione con un meltemiutente Unix, mentre in genere postgresviene utilizzato l'utente Unix dedicato .


Inoltre, _postgres(con trattino basso) per utente / gruppo non mi è noto. È un artefatto o previsto?
Erwin Brandstetter,

Sì, sembra essere un $PATHproblema, come hai affermato. Le cose funzionano come prima quando uso /usr/local/bin/psqlper accedere al database. O Lion non aveva un sistema PostgreSQL o il mio $ PATH era impostato in modo diverso. È passato un anno dall'ultima volta che ho confuso con questo, quindi non ricordo esattamente. Per quanto riguarda l'utente Unix ... con un'installazione Homebrew di PostgreSQL il server viene avviato da launchd e l'utente viene impostato come utente locale che lo ha installato, come impostazione predefinita. Le cose sono impostate in modo diverso sul server Mac OS X che avvia PostgreSQL automaticamente sotto postgres.
Meltemi,

4

Non conosco alcun file di configurazione per il client psql. Tuttavia psql rispetta un numero di variabili di ambiente correlate alle opzioni della riga di comando.

Quindi, per fare in modo che psql utilizzi automaticamente il socket di tua scelta, puoi impostare la variabile PGHOST sulla directory contenente il socket. vale a dire

PGHOST=/var/pgsql_socket_alt
psql -d mydatabsase

1
Non è documentato da nessuna parte che posso trovare che puoi impostare PGHOST sulla directory in cui vivono i file socket. Ma in effetti funziona. Grazie!
Andrew Schulman,

3

Provare:

psql -U rails -d myapp_development -h localhost

o

psql -U rails -d myapp_development -h 127.0.0.1

3

In ritardo, ma l'ho trovato utile: http://tammersaleh.com/posts/installing-postgresql-for-rails-3-1-on-lion

Questo era per Lion, ma avevo gli stessi problemi di quello in questo thread dopo l'aggiornamento da 10.6.8 a Mountain Lion e dopo aver installato PostgreSQL tramite HomeBrew prima del 10.6.8. Ho anche avuto la misteriosa /var/pgsql_socket_altcartella post-aggiornamento, ma l'ho appena rimossa e creata /var/pgsql_socketcome suggerito da @wolftron. Tuttavia, quella non era la soluzione finale.

Se lasciassi unix_socket_directoryvuoto / commentato postgresql.conf, qualsiasi progetto esistente prima dell'aggiornamento si lamenterebbe della /var/pgsql_socketmancanza del socket . Ma se avessi cambiato conf e hard-coded var/pgsql_socket, qualsiasi nuovo progetto si sarebbe lamentato della /tmpmancanza del socket . Molto frustrante ... fino a quando non ho reinstallato pg gemin un progetto precedente alla 10.8 ( gem uninstall pg && gem install pg) e lasciato unix_socket_directorycommentato nel conffile. Dopo un rapido pg_ctlriavvio del server, hanno funzionato sia i progetti nuovi che quelli vecchi. Il mio socket pgsql /tmpora vive , prima guerra mondiale.

Sidenote: se si utilizza activerecord-postgresql-adaptergem, disinstallarlo prima, quindi reinstallare pg, quindi reinstallare activerecord-postgresql-adapter.


2

Mi sono appena iscritto a dba SE, quindi non sembra poter commentare il post pertinente (che schifo!).

Tuttavia, ero fiducioso di trovarmi nella stessa barca di @thure. Mi ero assicurato che / usr / local / bin fosse prima nel mio PERCORSO rispetto a / usr / bin, avevo verificato con quali binari la shell aveva eseguito l'hashing whiche type, ecc.

Ho visto gli stessi sintomi di @thure. Poi ho avuto un'epifania; Mi sono reso conto di aver ricostruito la pggemma (sto usando Ruby) in una shell il cui PERCORSO era stato influenzato negativamente dal path_helper di Mac (che è gestito da / etc / profile e mette / usr / bin prima di / usr / local / bin) .

Ho disinstallato pg e l'ho reinstallato in una shell il cui PERCORSO era corretto. All'improvviso ho potuto connettermi!

Quindi assicurati di ricompilare le persone che legano le tue lingue e lascia che trovino la copia corretta di (presumibilmente) pg_config.



1

Ho scoperto che il collegamento simbolico della posizione effettiva alla posizione prevista funzionava perfettamente:

sudo ln -s /var/pgsql_socket_alt /var/pgsql_socket

sulla falsariga della risposta accettata da @thure ma più semplice.


1

Eccolo, 2016, El Capitan è là fuori e Apple continua a cambiare le cose. Postgres è installato come parte del sistema operativo e il file di configurazione postgres imposta la proprietà unix_socket_directories in postgresql.conf su / tmp. Il socket è in /tmp/.s.PGSQL.5432. Sono stato in grado di aggirare il problema eseguendo quanto segue:

sudo ln -s /tmp /var/pgsql_socket

Spero che questo aiuti qualcuno.


1

Cerca il file socket corretto

find / -name .s.PGSQL.5432 -ls

Dal risultato ottenere il percorso del file e utilizzare il percorso con il parametro "-h" all'interno del comando psql

Ad esempio, questo è il modo in cui mi collego al database del calendario e dei contatti del server macOS (all'interno di una sessione ssh al server):

sudo psql -U _calendar -h /private/var/run/caldavd/PostgresSocket/ -d caldav

Quindi, il file socket nel percorso verrebbe utilizzato per connettersi.


1

Di default Postgres sembra tentare di connettersi tramite socket di dominio unix. PRESA DOMINIO UNIX

Questo è successo a me quando stavo eseguendo l'istanza di Postgres sulla finestra mobile. Devi vedere che tipo di connessione accetta il tuo server. Per me era chiaramente TCP e non unix socket di dominio.

L'aggiunta di flag per accettare l'host ha reindirizzato la connessione al percorso corretto e risolto il problema.

psql -U username -p port -h host

PS: i socket di dominio Unix funzionano a livello di kernel e la connessione non deve passare attraverso tutto il jazz necessario per le connessioni TCP. Sono piuttosto veloci ed efficienti quando si desidera stabilire una connessione con la propria macchina da un processo diverso come parte della comunicazione tra processi.


0

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.



0

Ho avuto lo stesso errore provando a correre psqlsulla riga di comando. Si è scoperto che la mia soluzione era molto più semplice. Ho configurato male la porta di ascolto nel file di configurazione: /etc/postgresql/9.4/main/postgres.conf . Avevo cambiato la porta da port = 5432 a port = 5433. Quando l'ho cambiata di nuovo in 5432, ha funzionato come previsto.

Per verificare se hai fatto qualcosa di simile, puoi eseguire $ psql -p5433 Esistono diverse opzioni utili come questa per il comando psql che puoi trovare qui: http://www.postgresql.org/docs/9.4/static/app-psql .html in modo da poter testare la propria errata configurazione PROPRIA. Ovviamente, puoi semplicemente rimuovere l'ultima serie di modifiche di configurazione dai file * .conf per verificare se questi sono l'origine del tuo problema. Penso che valga la pena dare un'occhiata prima di perdere tempo con le autorizzazioni e le proprietà dei file. (Basta non dimenticare di /etc/init.d/postgresql restart)

Quello che NON sono riuscito a trovare è stato il file di configurazione che imposta i valori predefiniti per il comando CLI psql. Qualcuno può commentare con quello, per favore?

Per me torno sempre al mio primo principio di programmazione: "Di solito sono la fonte di qualsiasi errore dato!"

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.