A convenção para o PostgreSQL empacotado para o Debian ou derivados do Debian como o Ubuntu é usar
/var/run/postgresql
como o diretório para soquetes de domínio Unix. Por outro lado, a convenção para bibliotecas de cliente postgres auto-compiladas é usar /tmp
, a menos que autoconfigurado de outra forma. Portanto, a causa raiz usual dessa incompatibilidade entre ambos é uma mistura de coisas autocompiladas do lado do cliente com pacotes pré-compilados do lado do servidor (mesmo que o cliente e o servidor estejam instalados na mesma máquina, o lado do cliente e o lado do servidor são ainda distinto e pode estar fora de sincronia).
Soft-linking de
/tmp
para este diretório como sugerido pelo solicitante funciona, exceto que o link será perdido a cada reinicialização, porque em geral /tmp
é esvaziado na reinicialização. Uma opção melhor seria adicionar como uma entrada em
database.yml
:-
ouhost: /tmp
se o caminho real do soquete for/tmp
(servidor autocompilado, cliente empacotado)
-
ouhost: /var/run/postgresql
se o caminho real do soquete/var/run/postgresql/
(servidor empacotado, cliente auto-compilado).
Quando o valor no campo host começa com um caractere de barra, a biblioteca postgres sabe que é o local de um diretório para soquetes locais em vez de um nome de host. O nome do arquivo dentro do diretório
.s.PGSQL.portnumber
é gerado e não deve ser especificado, apenas o diretório. Outra possibilidade é configurar os pacotes de software autocompilados o mais próximo possível do Debian, substituindo os padrões como eles fazem.