File socket "/var/pgsql_socket/.s.PGSQL.5432" mancante in Mountain Lion (OS X Server)


95

Ho appena aggiornato il mio MacMini Server da Lion Server a Mountain Lion utilizzando OS X Server. Sto riscontrando lo stesso problema con PostgreSQL dell'anno scorso quando ho installato Lion Server per la prima volta.

Quando provo a eseguire qualsiasi tipo di comando da terminale PostgreSQL, ricevo il seguente famigerato messaggio di errore che molti hanno ricevuto nel corso degli anni:

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

Stavo tentando di cambiare la password per _postgres quando ho ricevuto l'errore. Ho provato diversi comandi ma ho ricevuto lo stesso errore. Ho appena riavviato il mio server ma senza fortuna. Ho effettuato l'accesso come root per guardare / var / pgsql_socket e la cartella è vuota. Anche la cartella / var / pgsql_socket_alt è vuota.

Ho controllato in linea su questo. Tuttavia, quasi tutte le soluzioni che ho letto, incluso Stack Overflow, suggeriscono la rimozione e la reinstallazione di PostgreSQL. Non lo so ma questa non sembra un'opzione plausibile perché diverse opzioni sull'app Server utilizzano PostgreSQL. Ho contattato Apple Enterprise Support (nessun accordo) e mi è stato detto che il mio problema avrebbe dovuto essere risolto dagli sviluppatori che avrebbero lanciato $ 695.

Ho un sito web che non funziona in questo momento perché non posso ricostruirlo. A questo punto non so a chi rivolgermi per chiedere aiuto. Continuerò a cercare online per vedere se riesco a trovare qualcosa. Tuttavia spero che qualcuno possa darmi una risposta veloce in modo da poter ricostruire il mio database.

Aggiornamento: 12/13/2012 15:33 GMT-6

Ecco il mio output per ps auwwx | grep postg:

_postgres      28123   0.0  0.1  2479696   7724   ??  Ss    3:01PM   0:00.04 /Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D /Library/Server/PostgreSQL For Server Services/Data -c listen_addresses= -c log_connections=on -c log_directory=/Library/Logs/PostgreSQL -c log_filename=PostgreSQL_Server_Services.log -c log_line_prefix=%t  -c log_lock_waits=on -c log_statement=ddl -c logging_collector=on -c unix_socket_directory=/Library/Server/PostgreSQL For Server Services/Socket -c unix_socket_group=_postgres -c unix_socket_permissions=0770
server1        28216   0.0  0.0  2432768    620 s000  R+    3:02PM   0:00.00 grep postg
_postgres      28138   0.0  0.0  2439388    752   ??  Ss    3:01PM   0:00.01 postgres: stats collector process                           
_postgres      28137   0.0  0.0  2479828   1968   ??  Ss    3:01PM   0:00.00 postgres: autovacuum launcher process                           
_postgres      28136   0.0  0.0  2479696    544   ??  Ss    3:01PM   0:00.00 postgres: wal writer process                           
_postgres      28135   0.0  0.0  2479696    732   ??  Ss    3:01PM   0:00.01 postgres: writer process                           
_postgres      28134   0.0  0.0  2479696    592   ??  Ss    3:01PM   0:00.00 postgres: checkpointer process                           
_postgres      28131   0.0  0.0  2439388    368   ??  Ss    3:01PM   0:00.00 postgres: logger process 

Aggiornamento: 12/13/2012 18:10 GMT-6

Dopo un'intensa ricerca sul web, questo video è stato trovato. Sono riuscito a far funzionare PostgreSQL e rimuovere l'errore. Sono in grado di connettermi usando pgadmin e phppgadmin. Stavo per tornare a Lion Server a causa della pura frustrazione. Ora non dovrò farlo.

http://www.youtube.com/watch?v=y1c7WFMMkZ4


22
Il tuo problema si riduce al fatto che la versione preinstallata di PostgreSQL per Mac OS X si psqltrova sul tuo PATHprima della versione che hai installato. Cercano la presa unix in posti diversi. Usa tcp / ip specificando -h localhosto preferibilmente aggiustalo in PATHmodo che psqlvenga trovato prima quello corretto . La bizzarra decisione di Apple di non solo raggruppare PostgreSQL, ma di pasticciare in modo da mettere le cose in posti non standard è la causa principale di questo problema.
Craig Ringer

3
C'è un problema in corso in OSX, in cui i pacchettizzatori hanno deciso di mettere il socket del dominio unix in un posto diverso dal normale. Lasciatemi ricerca ... BRB ... stackoverflow.com/a/8482546/905902
wildplasser

Ho copiato un vecchio PATH in .bashrc. Non ho installato un'altra versione di postgreSQL. Ecco la mia dichiarazione PATH che include il codice per RVM. Se qualcuno potesse dirmi cosa cambiarlo, lo farò. Quando faccio quale psql si trova in / usr / bin / psql. Grazie mille per tutti voi per il vostro aiuto. PATH = "$ PATH: $ HOME / .rvm / bin: / usr / bin / psql: / usr / local: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin" Sto anche cercando il file socket mentre sono connesso come root.
Pamela Cook - LightBe Corp

1
Per chi usa homebrewe osx@CraigRinger potrebbe avere la risposta giusta per te, conferma con brew doctor.
Karthik T

Risposte:


299

Sono stato in grado di aggiungere quanto segue al mio .bash_profile per evitare l'errore:

export PGHOST=localhost

Funziona perché :

Se ometti il ​​nome host, psql si connetterà tramite un socket di dominio Unix a un server sull'host locale o tramite TCP / IP a localhost su macchine che non dispongono di socket di dominio Unix.

Il tuo sistema operativo supporta i socket del dominio Unix, ma il socket Unix di PostgreSQL che psqlnecessita di uno non esiste o si trova in una posizione diversa da quella prevista.

Specificare un nome host esplicitamente come localhostforza psqlper utilizzare TCP / IP. L'impostazione di una variabile di ambiente PGHOSTè uno dei modi per ottenere ciò. È documentato nel manuale di psql .


37
Per chiunque si imbatta in questo con un'app Rails: puoi specificare l'host in database.yml.
dwhalen

12
Che tipo di stregoneria è questa? Voglio dire, sul serio. Potresti spiegare?
Sreejith Ramakrishnan

1
Torno sempre a questa risposta! Mi ha salvato di nuovo la vita. Questo frammento appartiene davvero a questa pagina, postgresapp.com/documentation/cli-tools.html .
sambecker

1
Non so perché, ma funziona per me! Ho incontrato questo problema in rails 5 quando uso 'rails db: create', ma ho già impostato host: localhostin database.yml. @dwhalen
Spark.Bao

1
Questo ha funzionato per Rails 5.2 senza modifiche database.yml, quando questo errore è apparso dopo il downgrade di Postgres a una vecchia versione gestita da Homebrew.
SexxLuthor

37

Prova a incollare nella console questo:

$ mkdir /var/pgsql_socket/ 

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

Finalmente ho ricevuto questa risposta.
Abs

Buona. Anche se penso di sapere perché funziona, sarebbe utile qualche spiegazione in più. Questa soluzione è migliore della risposta accettata, mancano solo i dettagli.
Glutexo

23

Sono stato in grado di risolvere semplicemente compilando 127.0.0.1 per l'indirizzo host PostgreSQL piuttosto che lasciarlo vuoto. (Esempio Django)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'database_name',
        'USER': 'database_user',
        'PASSWORD': 'pass',
        'HOST': '127.0.0.1',
        'PORT': '',
        }
}

1
Mi sento un po 'stupido ora, ho provato a risolvere questo problema per circa 2 giorni. Su Windows stavo usando '127.0.0.1', ma poi ho spostato il mio codice in produzione (Debian 7) e ho dovuto cambiarlo in ''. È un po 'strano che diano un messaggio di errore del genere che induce a credere che il problema potrebbe essere altrove.
fang_dejavu

10

Apri "postgresql.conf" nel tuo editor preferito. Cerca la variabile 'unix_socket_directories', molto probabilmente sarà simile a questa:

unix_socket_directories = '/private/tmp/'

Cambia la linea in questo:

unix_socket_directories = '/var/pgsql_socket/'

Nota se vuoi separarli dai file socket in più di una directory.


Ciò ha avuto l'effetto desiderato di provare a creare il socket altrove, ma il server non si avviava perché non aveva i permessi per creare file nella directory / var. Ho finito per modificare i file di configurazione a un livello superiore per utilizzare semplicemente il socket in cui si trovava originariamente. Più o meno come dato in questa risposta stackoverflow.com/a/29511357/1535177 .
Eosis


7

Come accennato da altri nei commenti, una soluzione davvero semplice a questo problema è dichiarare il database "host" all'interno della configurazione del database. Aggiungendo questa risposta solo per renderla un po 'più chiara per chiunque legga questo.

In un'app Ruby on Rails, ad esempio, modifica /config/database.yml:

development:
  adapter: postgresql
  encoding: unicode
  database: database_name
  pool: 5
  host: localhost

Nota: l'ultima riga aggiunta per specificare l'host. Prima di aggiornare a Yosemite non ho mai avuto bisogno di specificare l'host in questo modo.

Spero che questo aiuti qualcuno.

Saluti


Avevo bisogno di impostare il mio host sulla directory che ho trovato conteneva il .s.PGSQL.5432file.
Eosis

5

Verifica lo stato del database:

service postgresql status

Se il database non è in esecuzione, avvia il db:

sudo service postgresql start

bloccato con l'errore precedente e risolto avviando il db.
Sivakumar RJ

4

Puoi controllare il tuo file postgresql.conf ??

Su quale porta è in esecuzione il tuo postgres ??

Penso che non sia in esecuzione sulla porta 5432, altrimenti cambiarlo in 5432

OPPURE sull'uso del terminale

psql -U  postgres -p YOUR_PORT_NUMBER database_name

1
Non riesco a eseguire il comando del terminale. Ho fatto lo stesso errore. Ho bisogno di aiuto su dove posso trovare il file postgresql.conf. Avevo una cartella / var / pgsql durante l'esecuzione di Lion Server. Immagino che ora sia andato. Ho appena pubblicato il mio output per il comando ps grep. Ho attivato il servizio Wiki per eseguire PostgreSQL. Mi è stato detto che potevo usare i comandi sudo serveradmin senza attivare alcun servizio di app Server ma non funzionano. Sono loggato come root in questo momento, quindi dovrei essere in grado di fare qualsiasi cosa :) Ho controllato le porte in Network Utility. 5432 non utilizzato.
Pamela Cook - LightBe Corp

2

Ho avuto questo problema con Django.

Risolvilo impostando esplicitamente il tuo nome host su "localhost".


2

faccio a parole facendo questo:

dpkg-reconfigure locales

e scegli le tue località preferite

pg_createcluster 9.5 main --start

(9.5 è la mia versione di postgresql)

/etc/init.d/postgresql start

e poi parola!

sudo su - postgres
psql


1
apt-get install postgres-xc-client
apt-get install postgres-xc

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

Ho continuato a ricevere l'errore precedente e nessuna delle soluzioni di cui sopra ha funzionato per me. Finalmente la seguente soluzione ha risolto il mio problema su Mac OS X

Installa postgres usando brew

brew install postgres

Installa i servizi di infusione

brew tap homebrew/services

Per avviare Postgres come servizio in background

brew services start postgresql

Per interrompere manualmente postgres

brew services stop postgresql

Possiamo anche utilizzare i servizi di infusione per riavviare Postgres

brew services restart postgresql

1

controlla che il server postgres sia in esecuzione con il seguente codice

sudo service postgresql status

se il server postgres è inattivo, scrivi il seguente comando.

sudo service postgresql start

1

Ho ricevuto questo errore dopo che il mio computer si è bloccato e si è riavviato da solo. La soluzione per me non è stata trovata su questa pagina, piuttosto su un'altra domanda SO molto apprezzata con lo stesso errore psql: impossibile connettersi al server: nessun file o directory di questo tipo (Mac OS X) . La risposta: basta eliminare questo file /usr/local/var/postgres/postmaster.pid, quindi ha brew services restart postgresqlfatto il trucco. Ascolta l'avvertimento sulla risposta collegata sull'uccisione dei processi postgres prima di fare ciò altrimenti potresti corrompere il tuo db in modo permanente.


0

I permessi dei file sono restrittivi sul db Postgres di proprietà di Mac OS. Queste autorizzazioni vengono ripristinate dopo il riavvio o il riavvio di Postgres: ad esempio, serveradmin start postgres.

Quindi, reimposta temporaneamente le autorizzazioni o la proprietà:

sudo chmod o+rwx /var/pgsql_socket/.s.PGSQL.5432
sudo chown "webUser"  /var/pgsql_socket/.s.PGSQL.5432

Il ripristino delle autorizzazioni non è sicuro, quindi installa una versione del database di tua proprietà per una soluzione.


0

Mi ci è voluto un po 'ma sono riuscito a farlo funzionare finalmente dopo aver esaminato i suggerimenti offerti e aver effettuato ulteriori ricerche sul web. Ho utilizzato le informazioni nel seguente video di YouTube creato da Mactasia:

http://www.youtube.com/watch?v=y1c7WFMMkZ4

Quando l'ho fatto ho visto il file con estensione .lock. Tuttavia ho ancora ricevuto l'errore quando ho provato ad avviare il server Rails quando ho ripreso a lavorare sulla mia applicazione Rails usando PostgreSQL. Questa volta ho ricevuto un errore di autorizzazione negata. È stato allora che mi sono ricordato che non solo dovevo cambiare listen_addresses nel plist, ma dovevo anche cambiare unit_socket_permissions in 0777. Ho anche effettuato l'accesso come root per modificare i permessi sulla cartella var / pgsql_socket dove potevo accedervi dal livello utente. Postgres sta funzionando bene ora. Sono in procinto di ricaricare i miei dati dal mio backup SQL.

Quello che non ho capito era che quando avevo wiki attivato PostgreSQL presumibilmente funzionava quando ho eseguito un sudo serveradmin fullstatus postgres ma ho ancora ricevuto l'errore. Oh bene.


0

Ho appena creato un nuovo cluster e ha funzionato per me, stavo usando (PostgreSQL) 9.3.20:

sudo pg_createcluster 9.3 main --start

0

Per prima cosa rimuovi il postgres installato:

sudo apt-get purge postgr*
sudo apt-get autoremove

Quindi installa "synaptic":

sudo apt-get install synaptic
sudo apt-get update

Quindi installa Postgres

sudo apt-get install postgresql postgresql-contrib

0

Per l'app RubyOnRails aggiungi localhost Se usi la versione Postgresql personalizzata

# config/database.yml
default: &default
  host: localhost
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.