La convenzione per PostgreSQL impacchettata per Debian o derivati Debian come Ubuntu consiste nell'usare /var/run/postgresql come directory per i socket di dominio Unix. D'altra parte, la convenzione per le librerie client postgres auto-compilate consiste nell'usare /tmp , a meno che non sia stato configurato diversamente.
Quindi la solita causa principale di questa discrepanza tra i due è un mix di roba lato client autocompilata con pacchetti lato server precompilati (anche se client e server sono installati sulla stessa macchina, lato client e lato server sono ancora distinto e può non essere sincronizzato).
Collegamento soft da /tmp a questa directory come suggerito dal richiedente funziona tranne che il collegamento verrà perso ad ogni riavvio, perché in generale /tmp viene svuotato al riavvio.
Un'opzione migliore sarebbe aggiungere come voce in database.yml :
-
o
host: /tmpse il vero percorso del socket è/tmp(server autocompilato, client compresso) -
o
host: /var/run/postgresqlse il percorso del socket reale/var/run/postgresql/(server compresso, client autocompilato).
Quando il valore nel campo host inizia con un carattere slash, la libreria postgres sa che è la posizione di una directory per i socket locali piuttosto che un nome host. Il nome del file all'interno della directory .s.PGSQL.portnumber viene generato e non deve essere specificato, solo la directory.
Un'altra possibilità è configurare i pacchetti software autocompilati il più vicino possibile a Debian, sovrascrivendo le impostazioni predefinite come fanno.