PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL:perché psql non riesce a connettersi al server?

L'errore indica che l'utilità psql non riesce a trovare il socket per connettersi al server del database. O non hai il servizio database in esecuzione in background, o il socket si trova altrove, o forse il pg_hba.conf deve essere risolto.

Fase 1:verifica che il database sia in esecuzione

Il comando può variare a seconda del sistema operativo. Ma sulla maggior parte dei sistemi *ix funzionerebbe quanto segue, cercherà postgres tra tutti i processi in esecuzione

ps -ef | grep postgres

Sul mio sistema, mac osx, questo sputa fuori

501   408     1   0  2Jul15 ??         0:21.63 /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres -r /usr/local/var/postgres/server.log

L'ultima colonna mostra il comando utilizzato per avviare il server e le opzioni.

Puoi guardare tutte le opzioni disponibili per avviare il server postgres usando quanto segue.

man postgres

Da lì, vedresti che le opzioni -D e -r sono rispettivamente la datadir &il logfilename .

Fase 2:se il servizio postgres è in esecuzione

Usa find per cercare la posizione del socket, che dovrebbe essere da qualche parte nel /tmp

sudo find /tmp/ -name .s.PGSQL.5432

Se postgres è in esecuzione e accetta connessioni socket, quanto sopra dovrebbe dirti la posizione del socket. Sulla mia macchina, si è rivelato essere:

/tmp/.s.PGSQL.5432

Quindi, prova a connetterti tramite psql utilizzando esplicitamente la posizione di questo file, ad es.

psql -h /tmp/ dbname

Fase 3:se il servizio è in esecuzione ma non vedi un socket

Se non riesci a trovare il socket, ma vedi che il servizio è in esecuzione, verifica che il file pg_hba.conf consenta i socket locali.

Passare a datadir e dovresti trovare il pg_hba.conf file.

Per impostazione predefinita, nella parte inferiore del file dovresti vedere le seguenti righe:

# "local" is for Unix domain socket connections only
local       all       all       trust

Se non lo vedi, puoi modificare il file e riavviare il servizio postgres.