Não foi possível conectar-se ao Postgres no Vagrant Box - Conexão recusada?

10

Primeiro, sou novo no Vagrant e no Postgres.

Criei minha instância do Vagrant usando http://files.vagrantup.com/lucid32.box sem nenhum problema. Eu sou capaz de executar vagrant upe vagrant sshsem problemas.

Segui as instruções com uma pequena alteração; instalei o pacote "postgresql-8.4-postgis" em vez de "postgresql postgresql-contrib".

Iniciei o servidor usando:

postgres@lucid32:/home/vagrant$ /etc/init.d/postgresql-8.4 start

Enquanto estiver conectado à instância vaga, posso usar psqlpara conectar-me à instância sem problemas.

No meu Vagrantfile eu já havia adicionado:

config.vm.forward_port 5432, 5432

mas quando tento executar o psql a partir do host local, recebo:

psql: could not connect to server: Connection refused
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

Tenho certeza de que estou perdendo algo simples. Alguma ideia?

Atualizar:

Encontrei uma referência a um problema como este e o artigo sugeriu o uso de:

psql -U postgres -h localhost

com isso eu recebo:

psql: server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.
Greg
fonte

Respostas:

5

As instruções da postagem do blog que você mencionou não são certas para o ubuntu: elas usam partes da instalação de um servidor auto-compilado que não combina bem com uma versão em pacote.

Não se deve criar / usr / local / pgsql / data e executar o initdb nesse diretório, porque o pacote ubuntu usa /var/lib/postgresql/<pg-version-number>/<cluster-name>e roda initdbem nome do usuário.

O erro mencionando "/tmp/.s.PGSQL.5432" mostra que o local esperado para este arquivo está incorreto (para o ubuntu). Ele deve estar em /var/run/postgresql. Provavelmente isso se deve à execução do initdb manualmente com parâmetros incompatíveis com o ubuntu.

Os arquivos postgresql.conf e pg_hba.conf a serem editados para habilitar conexões não locais devem estar dentro /etc/postgresql/8.4/main, e não / usr / local / pgsql / data.

Ele /etc/init.d/postgresql-8.4deve ser iniciado pelo root (como tudo no /etc/init.d), não pelo usuário do postgres.

O PGDATA não deve ser configurado manualmente, porque novamente atrapalha o funcionamento dos pacotes do ubuntu postgres.

Minha resposta seria limpar e reinstalar o pacote postgresql-8.4 sem seguir nenhuma das instruções da postagem do blog. O postgresql-8.4-postgis depende do postgresql-8.4, portanto ele também será removido. Também certifique-se de desfazer a configuração do PGDATA em /etc/bash.bashrc.

Daniel Vérité
fonte
Estou refazendo a instalação agora, mas notei na sua resposta que você sugeriu que o caminho estava errado para o Ubuntu procurar o arquivo no lugar errado. Isso pode ser devido ao cliente em execução no OSX enquanto o servidor é uma caixa do Ubuntu?
Então eu fiz a reinstalação e recebi exatamente o mesmo erro. Eu olhei um pouco mais e descobri que não tinha portas abertas no iptables. Após seguir as instruções aqui: cyberciti.biz/tips/howto-iptables-postgresql-open-port.html Eu consigo conectar.
Não sei ao certo se a reinstalação fez parte da correção, mas isso foi definitivamente útil. Então, eu estou lhe dando a vitória
Quando cliente e servidores estão em hosts diferentes, o psql deve ser chamado psql -h <server> [optional other arguments]onde <server> é o nome do host ou o endereço IP (e não é o host local) do servidor (neste caso, o ubuntu box). Na pergunta, não parece que você estava chamando assim, então eu estava assumindo que todos os comandos foram lançados no servidor. De qualquer forma, estou realmente convencido de que reinstalar era uma medida sensata, mesmo que a conexão pudesse ter sido estabelecida.
Eu estou chamando-o como: psql -U postgres -h localhost desde que eu tenha configurado o encaminhamento de porta vagabundo
2

Você pode achar meu livro de receitas útil. Acabei de publicar no github. Ele configura o Ubuntu 12.04 LTS com o PostgreSQL 9.1.

rogelio2k
fonte