Erro do PostgreSQL 'Não foi possível conectar ao servidor: esse arquivo ou diretório não existe'


136

Como alguns outros, estou recebendo esse erro ao executar o rake db: migrate no meu projeto ou até mesmo tentar a maioria das tarefas de banco de dados para meus aplicativos Ruby on Rails 3.2.

PGError (não foi possível conectar ao servidor: não existe esse arquivo ou diretório. O servidor está executando localmente e aceitando conexões no soquete de domínio Unix "/tmp/.s.PGSQL.5432"?

Instalei o PostgreSQL com o Homebrew há muito tempo e, após uma tentativa de instalação do MongoDB recentemente, minha instalação do PostgreSQL nunca foi a mesma. Estou executando o OS X versão 10.6 Snow Leopard.

O que há de errado e como entendo melhor como o PostgreSQL é e deve ser configurado no meu Mac?

Até agora (eu acho) isso me diz que o PostgreSQL não está executando (?).

ps -aef|grep postgres                                                                                                   (ruby-1.9.2-p320@jct-ana) (develop) ✗
  501 17604 11329   0   0:00.00 ttys001    0:00.00 grep postgres

Mas isso me diz que o PostgreSQL está em execução?

✪ launchctl load -w /usr/local/Cellar/postgresql/9.1.4/homebrew.mxcl.postgresql.plist                                                        (ruby-1.9.2-p136) 
homebrew.mxcl.postgresql: Already loaded

Como faço para corrigir isso? o que não estou vendo?

PS: ~/Library/LaunchAgentsinclui dois arquivos .plist do PostgreSQL. Não tenho certeza se isso é relevante.

org.postgresql.postgres.plist
homebrew.mxcl.postgresql.plist

Eu tentei o seguinte e obtive um resultado como abaixo.

$ psql -p 5432 -h localhost

psql: could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (fe80::1) and accepting
    TCP/IP connections on port 5432?

Eu li que isso está ocorrendo porque o OS X instala sua própria versão do PostgreSQL e o Homebrew instala uma versão diferente em um local diferente e os comandos do PostgreSQL estão procurando no diretório / tmp /. Você precisará pesquisar mais sobre o Stack Overflow, mas basicamente vinculará o PostgreSQL para que qualquer coisa que procure nesse caminho tmp encontre o caminho real, se isso fizer sentido.

Este é o link em que encontrei mais algumas coisas para tentar, especificamente fazendo o link simbólico conforme descrito acima, o Mac OSX Lion Postgres não aceita conexões em /tmp/.s.PGSQL.5432 . Eu ainda gostaria que alguém reunisse uma explicação decente dos conceitos por trás da instalação do PostgreSQL no OS X e por que tudo é tão difícil.

Informações mais recentes para ajudar na solução de problemas:

$ which psql // This tells you which PostgreSQL you are using when you run $ psql. 

Então corra:

$ echo $PATH

O principal a levar em conta é o seguinte:

Certifique-se de que a entrada do caminho para a cópia do PostgreSQL que você deseja executar seja apresentada ANTES do caminho para o PostgreSQL do sistema OS X.

Este é um requisito essencial que decide qual PostgreSQL será executado e é o que me disseram que leva à maioria desses problemas.


Você já encontrou uma solução para isso? Vejo que você não marcou um. Nada disso me ajuda também.
— Andras Gyomrey

Ainda é principalmente vodoo e encarnações estranhas para fazê-lo funcionar. Acabei de adicionar [Editar 2] acima com um link com mais algumas sugestões e como fazer o link simbólico de acordo com meus comentários de edição. O Symlink funcionou para mim no final, mas acho que também desinstalei e reinstalei o postgres e o homebrew lá no caminho, tão difícil de saber exatamente o que fez a diferença. Boa sorte. Relate se você descobrir algo novo, com 15.000 visualizações sobre essa questão, é algo que causa muita dor nas pessoas!
— Evolve

@AndrasGyomrey Acabei de voltar do RailsCamp15 na Austrália e as pessoas disseram que a chave era acertar o arquivo do caminho, eu editei no Edit 3 acima para explicar isso.
— Evolve

Lembre-se de que o launchctl relatando algo como carregado NÃO significa necessariamente que está funcionando. Você deve dar uma olhada no bigsql.com como uma alternativa; funciona no Mac e tem uma boa interface de gerenciamento.
— Jim Nasby

Respostas:


102

Verifique se não há postmaster.pid no diretório postgres, provavelmente /usr/local/var/postgres/

remova isso e inicie o servidor.

Check - https://github.com/mperham/lunchy é um ótimo wrapper para o launchctl.


3
Isso funcionou para mim. Acabei de instalar o yosemite e carreguei o postgres do homebrew. Funcionou bem na primeira vez em que o usei, mas tive esse problema após uma reinicialização. Então, você pode explicar por que isso funcionou?
— Dan Williams

2
funcionou para mim, mas para newbs, alguém pode explicar por que e como isso é seguro
— Alexander Mills

58

" Postgres.app " é uma correção melhor se você estiver no OS X


Aqui está a correção:

  1. Pare o banco de dados
  2. cd /var
  3. rm -r pgsql_socket
  4. ln -s /tmp pgsql_socket
  5. chown _postgres:_postgres pgsql_socket
  6. Reinicie o PostgreSQL (não o seu computador)

Mais informações estão disponíveis em " postgresql 9.0.3. No Lion Dev Preview 1 ".


2
Erros de volta para mim e essa correção não ajudou. Eu sinto que estou pulando em um quarto escuro, trabalhando para entender o que realmente está acontecendo e um processo para me aplicar uma correção. Seria possível você explicar como eu poderia diagnosticar e corrigir esse problema?
— Evolve

Funciona para mim. Se sente um pouco estranho para chown /tmppara _postgres, mas hey :)
— wrdevos

O postgresapp funciona, mas por que não consigo iniciar meu servidor no terminal? Depois de sair deste aplicativo, o problema volta como esperado.
— hakunami

Isso funcionou para mim, mas observe que você deve ser root ou usar o sudo para executar os números 2 a 4. Além disso, esclareça a etapa 5 - você só precisa reiniciar o postgres, não o computador.
— mpelzsherman

2
Letras maiúsculas não dão uma resposta melhor. Ainda é perfeitamente aceitável instalar e executar o Postgres através do Homebrew (serviços.)
— Drenmi

55

Para mim, isso funciona

rm /usr/local/var/postgres/postmaster.pid

9
No meu caso, depois de eliminar o pid, eu precisava para reiniciar o PostgreSQL compg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
— Obromios

4
Eu também tive que reiniciar o postgres, quando instalado pelo homebrew, você pode fazer assim:brew services restart postgresql
— santuxus

2
Estou em env janela de encaixe No such file or directoryno meu caso
— Sarz

2
rm: /usr/local/var/postgres/postmaster.pid: Não
— existe

13

Isso funcionou para mim pelo erro que você mencionou. Siga um destes procedimentos:

  1. É possível alterar a porta padrão especificada no postgres.confarquivo, se você tiver usado algo diferente da porta padrão 5432durante a instalação.

  2. Altere o número da porta postgresql.confe reinicie o servidor DB.

  3. Em vez de psqldigitar o comando completo:

    psql -p 5432 -h localhost   
    • nome do servidor e a porta não

1. Acho que minha instalação teria sido de acordo com os padrões.
— Evolve

2. Eu poderia mudar isso, alguma implicação em mudar a porta?
— Evolve

3. Adicionado minha saída de 3 acima.
— Evolve

A opção 3 funcionou com porta personalizada. Como tenho vários servidores pg instalados (PostgreSQL 9.1, 9.2 e 9.3), também tive que apontar para o psql certo.
— Gpasse 27/08

11

Se você estiver executando o Homebrew, desinstale o Postgresql end pg gems: *

$ gem uninstall pg
$ brew uninstall postgresql

Faça o download e execute o seguinte script para corrigir a permissão em / usr / local: * https://gist.github.com/rpavlik/768518

$ ruby fix_homebrew.rb

Em seguida, instale o Postgres novamente e pg gem: *

$ brew install postgresql  
$ initdb /usr/local/var/postgres -E utf8

Para que o launchd inicie o postgresql no login, execute:

$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents 

Ou comece manualmente.

Instalar pg gem

$ gem install pg

Espero ter ajudado


De brew info postgres:ARCHFLAGS="-arch x86_64" gem install pg
— wrdevos 27/05

1
isso não excluiria os registros no banco de dados?
— kibaekr

initdb /usr/local/var/postgres -E utf8trabalho. Muitíssimo obrigado.
— Chris Jeon

8

Eu tive esse problema quando atualizei o Postgres para 9.3.x. A solução rápida para mim foi fazer o downgrade para a versão 9.2.x que eu tinha antes (não é necessário instalar uma nova).

$ ls /usr/local/Cellar/postgresql/
9.2.4
9.3.2
$ brew switch postgresql 9.2.4
$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
<open a new Terminal tab or window to reload>
$ psql

O " Homebrew instala uma versão específica da fórmula? " Oferece uma explicação muito mais abrangente, além de maneiras alternativas de corrigir o problema.


Obrigado pela contribuição e instruções claras para repetir sua correção. Esse link que você incluiu é abrangente. No momento, não estou tendo problemas com o postgres, por isso não tenho certeza do quanto isso é útil para outras pessoas, mas para qualquer outra pessoa, se você achar isso útil, comente aqui.
— Evolve

Acho útil e relevante, embora talvez não diretamente. Ele resolveu o problema apenas alternando versões, usando o brew, que é uma ferramenta bastante comum, e apenas repetiu as etapas, até agora, ótimo, o link aborda mais problemas específicos do brew, no entanto, para que eu possa ver seus questionamentos sobre o valor no contexto da pergunta do PO.
— Wkhatch


5

Portanto, para muitos dos problemas aqui, parece que as pessoas já estavam executando o psql e tiveram que removê-lo postmaster.pid. No entanto, eu não tive esse problema, pois nunca tive o postgres instalado corretamente no meu sistema.

Aqui está uma solução que funcionou para mim no MAC OSX Yosemite

  1. Eu fui a http://postgresapp.com/ e baixei o aplicativo.
  2. Mudei o aplicativo para o diretório Application /
  3. Adicionei-o ao $ PATH adicionando-o a .bashrc ou .bash_profile ou .zshrc: export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
  4. Eu executei o postgres no diretório Applications e executei o comando novamente e funcionou.

Espero que isto ajude! Toodles!

Além disso, esta resposta me ajudou muito: https://stackoverflow.com/a/21503349/3173748


Isso não aponta para o aplicativo Postgres, e não para a instalação de distribuição? Que podem cortá-lo fora de alguns pacotes de votos (pgrouting por exemplo, que você não pode instalar para o aplicativo Postgres que me causou tristeza sem fim e aqui estou agora)
— allthesignals

4

Quando você executa: psql -p 5432 -h localhost, ele não usa o driver de loopback, mas usa um soquete real e, portanto, você precisa configurar o postgres para aceitar as conexões do soquete. Portanto, mesmo que o pgadmin e outros clientes possam funcionar, o psql não funcionará.

Você precisa alterar os arquivos postgresql.conf e pg_hba.conf para permitir a conexão através de um soquete real. Isso também permitirá a conexão de um ip remoto, motivo pelo qual está desativado por padrão.

Esses arquivos estão no diretório de dados, mas o local real pode ser diferente dependendo de como o postgres foi instalado. Com o postgres em execução, execute o comando:

ps -ef | grep postmaster

Esses dois arquivos são o diretório -D (talvez / usr / local / pgsql / data).

Para o arquivo postgresql.conf, remova o comentário do endereço de escuta e mude para:

listen_address = '*'

Para o pg_hba.conf, adicione a linha:

host all all 0.0.0.0/0 md5

2

Eu realmente não conheço Mac ou Homebrew, mas conheço muito bem o PostgreSQL.

Você quer descobrir de onde os logs do PostgreSQL estão tentando iniciar e qual é o diretório do soquete do PostgreSQL. Por padrão, quando você cria o PG, o diretório do soquete é / tmp /. Se você não alterou isso quando criou o PG e iniciou o PG, poderá ver um arquivo de soquete em / tmp se fizer: ls -al / tmp

O arquivo de soquete começa com um ".", Portanto você não o verá com o '-a' para ls.

Se você não vê um soquete lá e não vê nada do ps awux | grep postgres, o PG provavelmente não está em execução, ou talvez esteja, e é o instalado pelo OSX. O que pode estar acontecendo é que você pode estar tendo um conflito ao ouvir na porta 5432 no host local - use netstat -anp para ver o que está ouvindo no 5432. Se um PG do Mac OSX já estiver ouvindo nessa porta, isso poderá ser o problema.

Espero que ajude. Ouvi dizer que o homebrew pode tornar as coisas um pouco feias e muitas pessoas com quem conversei para incentivar o uso de uma VM.


Obrigado por contribuir com isso. Se isso lhe der um pouco mais de experiência, o homebrew simplesmente executa esse script ao instalar o postgres. github.com/Homebrew/homebrew-core/blob/master/Formula/… Espero que você dê uma olhada e, possivelmente, compartilhe outras idéias do que encontrou. O que eu acho que as pessoas precisam é de uma maneira mais fácil de depurar por que estão recebendo esse erro para que saibam que ação tomar.
— Evolve

Com base no que posso entender desse script, existe um "postgres.log" em um diretório "var", possivelmente em HOMEBREW_PREFIX. Esse arquivo de log conterá informações sobre o PG que está tentando iniciar (incluindo se ele falhou ao iniciar por algum motivo). Aqui está um exemplo de mensagem mostrando o PG falhando ao iniciar devido a outro processo escutando na porta 5432:
— Stephen Frost

2016-12-19 09: 11: 59.582 EST [20669] LOG: não foi possível vincular o soquete IPv4: Endereço já em uso 2016-12-19 09: 11: 59.582 EST [20669] DICA: Outro postmaster já está em execução na porta 5432 ? Caso contrário, aguarde alguns segundos e tente novamente. 2016-12-19 09: 11: 59.582 EST [20669] AVISO: não foi possível criar soquete de escuta para "localhost" 2016-12-19 09: 11: 59.582 EST [20669] FATAL: não foi possível criar nenhum soquete TCP / IP 2016 -12-19 09: 11: 59.582 EST [20669] LOG: o sistema de banco de dados está desligado
— Stephen Frost

Além disso, parece que o script não altera o diretório de soquete padrão, portanto deve ser / tmp /. Você pode procurar no diretório de dados PG (que parece ser {HOMEBREW_PREFIX} / var / postgres) o arquivo postgresql.conf e procurar "unix_socket_directories". Ele é comentado por padrão, mas tem o padrão definido, por exemplo:
— Stephen Frost

#unix_socket_directories = '/ tmp' # lista de diretórios separados por vírgula
— Stephen Frost

2

Encontrei este erro ao executar no Mac 10.15.5 usando o homebrew.

Existe um arquivo chamado postmaster.pid que deve ser excluído automaticamente quando o postresql sai.

Se não fizer o seguinte

  • serviços de fermentação param o postgresql <--- Falha ao sair antes que a rm possa corromper o db
  • sudo rm /usr/local/var/postgres/postmaster.pid


1

Uma razão para você receber esse erro é que o banco de dados local do postgres é encerrado quando você reinicia o computador. Em uma nova janela do terminal, basta digitar:

$psql -h localhost 

para reiniciar o servidor.


1

Olá mundo :)
A melhor, mas estranha, maneira para mim foi fazer as próximas coisas.

1) Faça o download do postgres93.app ou outra versão. Adicione este aplicativo à pasta / Applications /.

2) Adicione uma linha (comando) ao arquivo .bash_profile(que está no meu diretório pessoal):

exportar PATH = / Aplicativos / Postgres93.app / Conteúdo / MacOS / bin /: $ PATH
É um CAMINHO para psqlpartir Postgres93.app. A linha (comando) é executada toda vez que o console é iniciado.

3) Inicie a Postgres93.apppartir da /Applications/pasta. Inicia um servidor local (a porta é "5432" e o host é "localhost").

4) Depois de todas essas manipulações, fiquei feliz em executar $ createuser -SRDP user_namee outros comandos e ver que funcionava! Postgres93.apppode ser feito para executar sempre que o sistema for iniciado.

5) Além disso, se você quiser ver seus bancos de dados graficamente, você deve instalar PG Commander.app. É uma boa maneira de ver seu banco de dados do postgres como bonitas tabelas de dados

Obviamente, é útil apenas para o servidor local. Ficarei feliz se essas instruções ajudarem outras pessoas que enfrentaram esse problema.


1

Eu tinha o PostgreSQL 9.3 e obtive o mesmo erro,

Não foi possível conectar ao servidor: Conexão recusada O servidor está executando no host "localhost" (127.0.0.1) e aceitando conexões TCP / IP na porta 5432?

Corrigi isso usando:

chmod 777  /var/lib/pgsql/9.3/data/pg_hba.conf 
service postgresql-9.3 restart

Funciona para mim.


Este arquivo não existe para mim
— allthesignals 15/02

1

pelo que vale, experimentei o mesmo erro quando tive um erro de digitação (em md4vez de md5) no meu pg_hba.confarquivo ( /etc/postgresql/9.5/main/pg_hba.conf)

Se você chegou aqui como eu, verifique o arquivo uma vez para garantir que não haja nada de ridículo.


onde está o pg_hba.confarquivo?
— bubakazouba

1
/etc/postgresql/{postgres_version}/main/pg_hba.conf
— Aidan Melen

0

Pode haver problemas diferentes com a execução local do PostgreSQL. Eu recomendaria limpar todas as versões do postgres instaladas e começar do zero. Depois de instalá-lo, é muito fácil recriar seu banco de dados se você tiver seu projeto de trilhos com as informações atualizadas.db/schema.rb

Aqui está como eu costumo instalar o PostgreSQL em um Mac . Se você estiver executando seu banco de dados no usuário raiz localmente, convém omitir a última etapa que cria um todousuário


0

Uma das razões pode ser que

unix_socket_directories no arquivo postgresql.conf não está listado no diretório que está procurando.

No exemplo da pergunta, ele está procurando pelo diretório / tmp, que deve ser fornecido no arquivo postgresql.conf

algo assim:

unix_socket_directories = '/var/run/postgresql,/tmp'    # comma-separated list of directories

Esta solução funcionou para mim.


0

Se você está no MacOS e usa o homebrew, achei esta resposta extremamente útil:

https://stackoverflow.com/a/27708774/4062901

Para mim, meu servidor estava em execução, mas devido a uma atualização eu estava tendo problemas para conectar (nota: eu uso serviços de preparação). Se o Postgres estiver em execução, tente cat /usr/local/var/postgres/server.logver o que os logs dizem. Meu erro foi uma migração, não um problema de conexão.

Também após a migração manual que eles propõem (o que funciona, mas) eu descobri que não havia mais uma tabela para o meu usuário. Tente este comando para corrigir isso: createdb(respondido via psql: FATAL: o banco de dados "<usuário>" não existe )


0

Basta reiniciar o Postgres assim que o erro aparecer executando brew services restart postgresqle tente novamente


0

para mim, o comando rm /usr/local/var/postgres/postmaster.pidnão funcionou porque instalei uma versão específica do postgresql com o homebrew.

o comando certo é rm /usr/local/var/postgres@10/postmaster.pid.

então brew services restart postgresql@10.


-5

É muito simples. Adicione apenas host ao seu arquivo database.yaml.


host: 127.0.0.1 ou host: localhost, por exemplo.
— precisa saber é o seguinte

Todo mundo adora uma solução simples. Mas como isso funciona? Como eu disse nos meus comentários acima, pesquisar sobre isso me levou a muitos caminhos complexos. Você pode elaborar um pouco e nos fornecer um pouco mais de histórico sobre o que realmente vê o problema e como essa simples alteração soluciona o problema. Obrigado por contribuir com este! :)
— Evolve

A diferença é que, com uma conexão IP, não há como se preocupar com a localização do arquivo de soquete; em vez disso, você se preocupa com o endereço IP.
— Jim Nasby
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.