La convention pour PostgreSQL empaqueté pour Debian ou des dérivés de Debian tels qu'Ubuntu est d'utiliser /var/run/postgresql
comme répertoire pour les sockets de domaine Unix. D'autre part, la convention pour les bibliothèques client postgres auto-compilées est d'utiliser /tmp
, à moins d'être auto-configuré autrement.
Ainsi, la cause première habituelle de cette incompatibilité entre les deux est un mélange de choses auto-compilées côté client avec des packages pré-compilés côté serveur (même si le client et le serveur sont installés sur la même machine, côté client et côté serveur sont toujours distinct et peut être désynchronisé).
Lien logiciel depuis /tmp
à ce répertoire comme suggéré par le demandeur fonctionne sauf que le lien sera perdu à chaque redémarrage, car en général /tmp
est vidé au redémarrage.
Une meilleure option serait d'ajouter une entrée dans database.yml
:
-
soit
host: /tmp
si le vrai chemin du socket est/tmp
(serveur auto-compilé, client packagé) -
ou
host: /var/run/postgresql
si le vrai chemin du socket/var/run/postgresql/
(serveur packagé, client auto-compilé).
Lorsque la valeur dans le champ hôte commence par une barre oblique, la bibliothèque postgres sait qu'il s'agit de l'emplacement d'un répertoire pour les sockets locaux plutôt que d'un nom d'hôte. Le nom de fichier dans le répertoire .s.PGSQL.portnumber
est généré et ne doit pas être spécifié, seul le répertoire.
Une autre possibilité consiste à configurer les packages logiciels auto-compilés aussi près que possible de Debian, en remplaçant les valeurs par défaut comme ils le font.