Eu uso a seguinte solução alternativa para que os dois clientes fiquem felizes:
sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
Eu instalei a pilha Bitnami Django que incluía o PostgreSQL 8.4.
Quando executo psql -U postgres
, recebo o seguinte erro:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
O PG definitivamente está rodando e o arquivo pg_hba.conf
tem esta aparência:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
O que dá?
"Prova" em que a página está em execução:
root@assaf-desktop:/home/assaf# ps axf | grep postgres
14338 ? S 0:00 /opt/djangostack-1.3-0/postgresql/bin/postgres -D /opt/djangostack-1.3-0/postgresql/data -p 5432
14347 ? Ss 0:00 \_ postgres: writer process
14348 ? Ss 0:00 \_ postgres: wal writer process
14349 ? Ss 0:00 \_ postgres: autovacuum launcher process
14350 ? Ss 0:00 \_ postgres: stats collector process
15139 pts/1 S+ 0:00 \_ grep --color=auto postgres
root@assaf-desktop:/home/assaf# netstat -nltp | grep 5432
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 14338/postgres
tcp6 0 0 ::1:5432 :::* LISTEN 14338/postgres
root@assaf-desktop:/home/assaf#
Eu uso a seguinte solução alternativa para que os dois clientes fiquem felizes:
sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
Suponhamos que você esteja usando a versão do sistema do comando psql
, que procurará os soquetes de domínio postgres unix em /var/run/postgresql
e os postgres de terceiros que você está usando foram configurados para colocá-los em outro lugar.
A solução mais fácil é provavelmente usar /opt/djangostack-1.3-0/postgresql/bin/psql
, supondo que exista um, já que ele provavelmente irá procurar no lugar correto para os soquetes unix.
Caso contrário, você precisa observar a configuração unix_socket_directory
em postgresql.conf
, mas é bem provável que ela seja comentada e esteja usando um padrão compilado.
A mensagem de erro refere-se a um soquete do domínio Unix, portanto, você precisa ajustar sua invocação de netstat
para não excluí-las. Então tente sem a opção -t
:
netstat -nlp | grep 5432
Eu acho que o servidor está realmente ouvindo no soquete /tmp/.s.PGSQL.5432
em vez do /var/run/postgresql/.s.PGSQL.5432
que o seu cliente está tentando conectar. Este é um problema típico ao usar pacotes PostgreSQL compilados manualmente ou de terceiros no Debian ou Ubuntu, porque o padrão de origem para o diretório de soquete do domínio Unix é /tmp
, mas o pacote Debian o altera para /var/run/postgresql
.
Soluções possíveis:
/opt/djangostack-1.3-0/postgresql/bin/psql
). Possivelmente, desinstale completamente os pacotes fornecidos pelo Ubuntu (pode ser difícil por causa de outras dependências reversas). -h localhost
para se conectar via TCP / IP. -h /tmp
ou equivalente PGHOST
para apontar para o diretório correto. Tags postgresql linux