PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Fehler mit postgresql-Datenbank:Läuft der Server lokal und akzeptiert Verbindungen auf dem Unix-Domain-Socket /var/run/postgresql/.s.PGSQL.5432?

Die Konvention für PostgreSQL-Pakete für Debian oder Debian-Derivate wie Ubuntu ist die Verwendung von /var/run/postgresql als Verzeichnis für Unix-Domain-Sockets. Andererseits besteht die Konvention für selbst kompilierte Postgres-Clientbibliotheken darin, /tmp zu verwenden , sofern nicht anders selbst konfiguriert.

Die übliche Ursache für diese Diskrepanz zwischen beiden ist also eine Mischung aus selbst kompiliertem clientseitigem Zeug mit vorkompilierten serverseitigen Paketen (selbst wenn Client und Server auf demselben Computer installiert sind, Client-Seite und Server-Seite sind es immer noch unterschiedlich und kann nicht synchron sein).

Soft-Linking von /tmp zu diesem Verzeichnis wie vom Fragesteller vorgeschlagen funktioniert, außer dass der Link bei jedem Neustart verloren geht, weil im Allgemeinen /tmp wird beim Neustart geleert.

Eine bessere Option wäre das Hinzufügen als Eintrag in database.yml :

  • entweder host: /tmp wenn der echte Socket-Pfad /tmp ist (selbst kompilierter Server, gepackter Client)

  • oder host: /var/run/postgresql wenn der echte Socket-Pfad /var/run/postgresql/ (gepackter Server, selbst kompilierter Client).

Wenn der Wert im Hostfeld mit einem Schrägstrich beginnt, weiß die Postgres-Bibliothek, dass es sich um den Speicherort eines Verzeichnisses für lokale Sockets und nicht um einen Hostnamen handelt. Der Dateiname im Verzeichnis .s.PGSQL.portnumber wird generiert und darf nicht angegeben werden, nur das Verzeichnis.

Eine andere Möglichkeit besteht darin, die selbstkompilierten Softwarepakete so nah wie möglich an Debian zu konfigurieren und dabei die Standardeinstellungen zu überschreiben.