De conventie voor PostgreSQL verpakt voor Debian of Debian-derivaten zoals Ubuntu is het gebruik van /var/run/postgresql
als de map voor Unix-domeinsockets. Aan de andere kant is de conventie voor zelf-gecompileerde postgres-clientbibliotheken het gebruik van /tmp
, tenzij zelf anders geconfigureerd.
Dus de gebruikelijke oorzaak van deze mismatch tussen beide is een mix van zelf-gecompileerde client-side dingen met vooraf gecompileerde server-side pakketten (zelfs als client en server op dezelfde machine zijn geïnstalleerd, client-side en server-side zijn nog steeds verschillend en kan niet synchroon lopen).
Soft-linking van /tmp
naar deze map, zoals gesuggereerd door de vraagsteller werkt, behalve dat de link bij elke herstart verloren gaat, omdat in het algemeen /tmp
wordt leeggemaakt bij opnieuw opstarten.
Een betere optie zou zijn om toe te voegen als een item in database.yml
:
-
ofwel
host: /tmp
als het echte socketpad/tmp
. is (zelf samengestelde server, verpakte client) -
of
host: /var/run/postgresql
als het echte socketpad/var/run/postgresql/
(verpakte server, zelf samengestelde client).
Wanneer de waarde in het hostveld begint met een schuine streep, weet de postgres-bibliotheek dat dit de locatie is van een map voor lokale sockets in plaats van een hostnaam. De bestandsnaam in de directory .s.PGSQL.portnumber
wordt gegenereerd en mag niet worden opgegeven, alleen de map.
Een andere mogelijkheid is om de zelfgecompileerde softwarepakketten zo dicht mogelijk bij Debian te configureren, waarbij de standaardinstellingen worden genegeerd.