Konvence pro PostgreSQL zabalený pro Debian nebo deriváty Debianu, jako je Ubuntu, je použití /var/run/postgresql jako adresář pro sokety domény Unix. Na druhou stranu konvence pro samostatně zkompilované klientské knihovny postgres je použití /tmp , pokud není samostatně nakonfigurováno jinak.
Obvyklou hlavní příčinou tohoto nesouladu mezi oběma je tedy kombinace samostatně zkompilovaných věcí na straně klienta s předkompilovanými balíčky na straně serveru (i když jsou klient a server nainstalovány na stejném počítači, na straně klienta a na straně serveru jsou stále zřetelné a mohou být nesynchronizované).
Soft-linking z /tmp do tohoto adresáře, jak navrhuje tazatel, funguje kromě toho, že se odkaz ztratí při každém restartu, protože obecně /tmp se při restartu vyprázdní.
Lepší možností by bylo přidat jako položku v database.yml :
-
buď
host: /tmppokud je skutečná cesta soketu/tmp(samokompilovaný server, zabalený klient) -
nebo
host: /var/run/postgresqlpokud je skutečná cesta soketu/var/run/postgresql/(balený server, samostatně zkompilovaný klient).
Když hodnota v poli hostitele začíná lomítkem, knihovna postgres ví, že se jedná o umístění adresáře pro místní sokety, nikoli o název hostitele. Název souboru v adresáři .s.PGSQL.portnumber je generován a nesmí být specifikován, pouze adresář.
Další možností je nakonfigurovat samostatně zkompilované softwarové balíčky co nejblíže Debianu a přepsat výchozí hodnoty, jak to dělají.