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: /tmp
pokud je skutečná cesta soketu/tmp
(samokompilovaný server, zabalený klient) -
nebo
host: /var/run/postgresql
pokud 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í.