Postgres - não foi possível criar nenhum soquete TCP / IP


14

Estou executando um aplicativo rails em desenvolvimento com o postgresql 9.3. Quando tentei iniciar o servidor de passageiros hoje, obtive:

PG::ConnectionBad - could not connect to server: Connection refused
    Is the server running on host "localhost" (217.74.65.145) and accepting
    TCP/IP connections on port 5432?

Não foi grande coisa que pensei, isso já aconteceu antes. Reiniciar o postgres sempre resolvia o problema. Então eu corri sudo service postgresql restarte consegui:

 * Restarting PostgreSQL 9.3 database server
 * The PostgreSQL server failed to start. Please check the log output:
2014-06-11 10:32:41 CEST LOG:  could not bind IPv4 socket: Cannot assign requested address
2014-06-11 10:32:41 CEST HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2014-06-11 10:32:41 CEST WARNING:  could not create listen socket for "localhost"
2014-06-11 10:32:41 CEST FATAL:  could not create any TCP/IP sockets
...fail!

Meus postgresql.confpontos para os padrões: localhoste porta 5432. Tentei alterar a porta, mas a mensagem de erro é a mesma (exceto a alteração da porta).

Ambos ps aux | grep postgresqle ps aux | grep postmasternão retornam nada.

EDITAR:

Em postgresql.confmudei listen_addressespara em 127.0.0.1vez de localhoste ele fez o truque, o servidor reiniciou. Eu também tive que editar a configuração de banco de dados dos meus aplicativos e apontar para em 127.0.0.1vez de localhost. No entanto, a questão agora é: por que o host local é considerado 217.74.65.145e não 127.0.0.1?

Essa é a minha /etc/hosts:

127.0.0.1   local
127.0.1.1   jacek-X501A1
127.0.0.1   something.name.non.example.com
127.0.0.1   company.something.name.non.example.com

alguma saída de sudo netstat -anlp | grep 5432?
Flup

1
Se você deseja ofuscar seus dados, faça-o com responsabilidade e use-o example.comcomo nome de domínio.
Jenny D

Respostas:


12

Você /etc/hostsestá quebrado. A primeira linha deve ler

127.0.0.1   localhost something.name.non.example.com company.something.name.non.example.com

Nota para futuros leitores que mesmo se você faz tem uma entrada de localhost em /etc/hosts, vários outros fatores podem causar uma resposta DNS diferentes quando uma pesquisa de DNS de localhosté realmente executado. Consulte stackoverflow.com/a/47824848/5419599 .
Curinga

@Wildcard Não sei a qual SO que resposta seria aplicável (se houver). Certamente não faz muito sentido no Linux.
kasperd

1
@kasperd Suponho que se você recebeu o pedido em dns filesvez do files dnsnsswitch.conf e tem um servidor de nomes que resolve o localhost, você pode ter problemas. Mas isso faz som altamente improvável para mim ...
Jenny D

@ JennyD A resposta acima sugere sugerir o uso nslookuppara verificar. Mas o nslookupcomando no Linux não usa nsswitch.confe /etc/hostsem primeiro lugar. E quanto a colocar dns filesna configuração, isso parece pedir problemas para mim.
kasperd

1
@kasperd Acordado - seria bastante elevado nos "é-seu-próprio-maldito-fault" escala ...
Jenny D

0

Entendo que esta pergunta foi respondida, mas para quem ainda tem o erro, o motivo pode ser que algum outro processo já o tenha iniciado. Por exemplo, Homebrewna inicialização do sistema.

Se for esse o caso, tente pará-lo:
brew services stop postgres

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.