psql: não foi possível conectar ao servidor: nenhum arquivo ou diretório (Mac OS X)

247

Ao reiniciar o meu Mac, recebi o temido erro do Postgres:

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"?

A razão pela qual isso aconteceu é porque meu macbook congelou completamente devido a um problema não relacionado e eu tive que fazer uma reinicialização completa usando o botão liga / desliga. Após a reinicialização, não consegui iniciar o Postgres devido a esse erro.

Dragão de fogo
fonte
1
Como uma verificação de sanidade, certifique-se de ter PG execução na sua máquina
Jbur43
1
Quando você deixar a resposta, tente explicar por que isso está acontecendo ou como o sistema Postgres funciona, para que não tentemos apenas coisas aleatórias.
Nick Res
6
brew reinstall postgresql stackoverflow.com/a/39781473/6086226 funcionou para mim
Derk Jan Speelman
bebida reinstalar postgresql isso resolveu o meu problema
Ajay Kumar

Respostas:

420

AVISO: Se você excluir o postmaster.pid sem garantir que realmente não haja postgresprocessos executando você, poderá danificar permanentemente o banco de dados . (O PostgreSQL deve excluí-lo automaticamente se o postmaster tiver saído.).

SOLUÇÃO: Corrigido o problema - excluí este arquivo e tudo funcionou!

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

-

e aqui está como eu descobri por que isso precisava ser excluído.

  1. Usei o seguinte comando para verificar se havia algum processo PG em execução. para mim não havia, nem consegui iniciar o servidor PG:

    ps auxw | grep post
  2. Eu procurei pelo arquivo .s.PGSQL.5432 que estava na mensagem de erro acima. eu usei o seguinte comando:

    sudo find / -name .s.PGSQL.5432 -ls

    isso não mostrou nada depois de pesquisar em todo o computador para que o arquivo não existisse, mas obviamente psql"queria" ou "achou que estava lá".

  3. Dei uma olhada nos logs do meu servidor e vi o seguinte erro:

    cat /usr/local/var/postgres/server.log

    no final do log do servidor, vejo o seguinte erro:

    FATAL:  pre-existing shared memory block (key 5432001, ID 65538) is still in use
    HINT:  If you're sure there are no old server processes still running, remove the shared memory block or just delete the file "postmaster.pid".
  4. Seguindo os conselhos da mensagem de erro, excluí o arquivo postmaster.pid no mesmo diretório que server.log. Isso resolveu o problema e eu pude reiniciar.

Então, parece que meu macbook congelando e sendo reinicializado com força fez com que o Postgres pensasse que seus processos ainda estavam em execução, mesmo após a reinicialização. A exclusão deste arquivo foi resolvida. Espero que isso ajude os outros! Muitas pessoas têm problemas semelhantes, mas a maioria das respostas tinha a ver com permissões de arquivo, enquanto no meu caso as coisas eram diferentes.

Dragão de fogo
fonte
9
espero que essa resposta acabe ajudando alguém e agradeço à pessoa que a votou de forma positiva. apesar do moderador que marcou essa pergunta como duplicada, ela é única e útil. obrigado stack overflow pelo site incrível e pelos especialistas aqui por compartilhar!
FireDragon
2
Apenas FWIW, apagando postmaster.pid é perigoso, você tem que ser realmente certeza que não há postgresprocessos em execução antes de fazê-lo.
Craig Ringer
20
Ótima resposta. Obrigado por postar todo o processo, e não apenas o comando potencialmente destrutivo!
Dojosto
3
Acordado. A resposta sobre o postmaster.pid é boa, mas cada passo do processo de descobrir se / onde o postgres está sendo executado é inestimável . Obrigado!
Clinton
11
Meu log do postgres no macos estava em /usr/local/var/log/postgres.log.
Ryan Tuck
172

Nenhuma das opções acima funcionou para mim. Eu tive que reinstalar o Postgres da seguinte maneira:

  • Desinstale o postgresql com o brew: brew uninstall postgresql
  • brew doctor (conserte o que estiver aqui)
  • brew cleanup
  • Remova todas as pastas do Postgres:

    • rm -r /usr/local/var/postgres
    • rm -r /Users/<username>/Library/Application\ Support/Postgres
  • Reinstale o postgresql com o brew: brew install postgresql

  • Iniciar servidor: brew services start postgresql
  • Agora você deve criar seus bancos de dados ... ( createdb)
ypicard
fonte
4
Trabalhou para mim, mas não precisei remover um banco de dados real e não tinha uma pasta no Suporte a aplicativos. Acho que o ponto era que alguns elementos do brew quebraram os links simbólicos durante a instalação do postgres. Corrigi-los e instalar o postgres novamente resolveu o problema. Obrigado!
Kulbi
2
Nem este nem resposta top trabalhou para mim, até que eu também correubrew postgresql-upgrade-database
ErikAGriffin
Eles funcionaram para mim, exceto que eu não precisei excluir os dados antigos.
Amal Antony
Para confirmar: isso exclui todos os seus bancos de dados, correto? Consegui sobreviver com apenas um brew reinstall postgres, confirmando que o último número da versão principal do Homebrew Postgres era o mesmo que o atual (quebrado).
Jacob Ford
85

Se você estiver no macOS e instalou o postgres via homebrew, tente reiniciá-lo com

brew services restart postgresql

Se você estiver no Ubuntu, poderá reiniciá-lo com qualquer um destes comandos

sudo service postgresql restart

sudo /etc/init.d/postgresql restart
Jabdish Barabari
fonte
34

Talvez isso não esteja relacionado, mas um erro semelhante aparece quando você atualiza postgrespara uma versão principal usando brew; usando brew info postgresqldescobriu isso que ajudou:

To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
Crazy Barney
fonte
4
Isso funcionou para mim em ir 11-12 em Catalina
nzajt
1
Trabalhou para mim também
emptywalls 06/03
15

Aqui está o meu caminho:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm /usr/local/var/postgres/postmaster.pid
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
smartworld-dm
fonte
1
Isso funcionou para mim quando nenhuma outra parada e inicialização / reinicialização / reinstalação do Postgres usando homebrew foram feitas. Obrigado @ smartworld-dm
Bradley
1
Essa é a alma que eu sempre volto. Eu poderia adicionar um alias que, quando eu executá- fix-my-postgresqllo, executará isso :)
Tomas K
1
Alguma idéia de por que eu tenho que fazer isso toda vez que reinicio meu PC?
stephano 12/04
11

se você postmaster.pidse foi e você não pode reiniciar ou algo assim, faça o seguinte:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

como explicado aqui inicialmente

Antoine
fonte
8

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 graficamente seus bancos de dados, instalePG 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.

crazzyaka
fonte
1
A chave aqui é adicionar o Postgres ao seu caminho (etapa 2). Isso me ajudou. Se você instalou o Postgres usando o Homebrew, pode adicioná-lo ao seu caminho adicionando a seguinte linha ao seu .bash_profile: export PATH='/usr/local/Cellar/postgresql/9.4.1/bin/':$PATH- Lembre-se de que o número da sua versão pode ser diferente.
Tina
7

Esse problema tem muitas fontes e, portanto, muitas respostas. Eu experimentei cada um deles.

1) Se você tiver algum tipo de falha, remover o arquivo /usr/local/var/postgres/postmaster.pid provavelmente é necessário, pois o postgres pode não ter o tratado adequadamente. Mas verifique se nenhum processo está em execução.

2) Craig Ringer apontou em outros posts que o empacotamento do postgreSQL pela Apple leva a problemas de instalação da pg gem A configuração da variável de ambiente PATH é uma solução.

3) Outra solução é desinstalar e reinstalar a gema. Uma atualização de preparação também pode ser necessária.

Se você se deparar com esta postagem, se conseguir identificar uma das fontes, economizará tempo ...

Jerome
fonte
3
Estou feliz por ter postado isso. Outro acidente e a resposta pode ser recuperada rapidamente ...
Jerome
6

Para mim, a solução foi simplesmente reiniciar meu computador. Tentei reiniciar com os serviços do Brew e, quando isso não funcionou, reiniciar parecia a próxima melhor opção a ser feita antes de examinar algumas das soluções mais envolvidas. Tudo funcionou como deveria depois.

Matt Lemieux
fonte
5

Eu estava enfrentando um problema semelhante aqui. Resolvi esse problema como abaixo.

Na verdade, o processo do postgres está inoperante, para ver o status do postgres execute o seguinte comando

sudo /etc/init.d/postgres status

Ele diz que o processo está morto` basta iniciar o processo

sudo /etc/init.d/postgres start
Jabdish Barabari
fonte
Obrigado pela resposta, sua resposta me ajudou a resolver o mesmo problema com algumas modificações: sudo /etc/init.d/postgresql começar
Pravitha V
4

Isso aconteceu comigo depois que o meu Mac (High Sierra) congelou e tive que reiniciá-lo manualmente (pressione e segure o botão liga / desliga). Tudo o que eu precisava fazer para corrigi-lo foi fazer uma reinicialização limpa.

skwidbreth
fonte
3

Meu problema acabou sendo que eu estava usando o Gas Mask (um gerenciador de arquivos hosts para Mac) e não tinha uma entrada para localhost no arquivo hosts que estava usando.

Eu adicionei:

127.0.0.1 localhost

E isso resolveu meu problema.

jawns317
fonte
3

Não sei bem por que, mas minha instalação do Postgres foi um pouco danada e alguns arquivos foram excluídos, resultando no erro que o OP está mostrando.

Apesar do fato de eu conseguir executar comandos como brew service retart postgrese ver as mensagens apropriadas, esse erro persistiu.

Examinei a documentação do postgres e descobri que meu arquivo /usr/local/var/postgresestava totalmente vazio. Então eu executei o seguinte:

initdb /usr/local/var/postgres

Parece que algumas configurações ocorreram com esse comando.

Então ele me pediu para executar isso:

postgres -D /usr/local/var/postgres

E isso me disse que um arquivo postmaster.pid já existe.

Eu só precisava saber se o brew seria capaz de pegar as configurações que acabei de executar, então testei.

ls /usr/local/var/postgres

Isso me mostrou um arquivo postmaster.pid. Eu fiz brew services stop postgresql, e o arquivo postmaster.pid desapareceu. Então eu fiz brew services start postgresql, e VIOLA, o arquivo reapareceu.

Depois fui em frente e executei meu aplicativo, que de fato encontrou o servidor, no entanto, meus bancos de dados parecem ter sumido.

Embora eu saiba que eles podem não ter desaparecido - a nova inicialização que fiz pode ter criado uma nova área de dados, e a antiga não está sendo apontada. Eu teria que olhar para onde está e apontar novamente ou simplesmente criar meus bancos de dados novamente.

Espero que isto ajude! A leitura dos documentos do postgres me ajudou muito. Eu odeio ler respostas que são como "Cole this it works!" porque eu não sei o que diabos está acontecendo e por quê.

Nick Res
fonte
2

As causas deste erro são muitas; primeiro localize seu arquivo de log e verifique se há pistas. Pode estar em /usr/local/var/log/postgres.logou /usr/local/var/postgres/server.logou possivelmente em outro lugar. Se você instalou com o Homebrew, poderá encontrar o local em ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist.

Tamlyn
fonte
2

Eu tive o mesmo problema. Na maioria das vezes, o problema é o fato de haver um arquivo restante

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

que funciona para a maioria das pessoas, mas meu caso foi diferente - tentei pesquisar no Google por esse problema nas últimas 3 horas, desinstalou o postresql no OSX por meio do brew, limpou o banco de dados, nada funcionou.

Finalmente, notei que tinha um problema com o brew que, sempre que tentava instalar qualquer coisa, aparecia:

Error: Permission denied @ rb_sysopen - /private/tmp/github_api_....

ou algo assim no final de uma instalação.

Eu simplesmente fiz sudo chmod -R 777 /private/tmpe finalmente funciona!

Estou escrevendo isso porque isso pode ser uma solução para outra pessoa

Maciej Pk
fonte
1

/var/log/ e execute cat postgres.log Aqui você encontrará o motivo da falha do postgres. Se for um desligamento inteligente, provavelmente a sua icu4cversão (biblioteca C ++ para Unicode) não é adequada à qual está vinculada postgres. Portanto, execute os seguintes comandos.

brew upgrade brew cleanup Isso deve funcionar;)

Shishir
fonte
Pode ter que correr brew styledepois se brew cleanupquebrar o Homebrew.
olliezhu 15/01
0

Eu tive que consultar este post várias vezes para resolver esse problema. Há outra correção, que também se aplica a problemas semelhantes com outros programas em execução.

Acabei de descobrir que você pode usar os dois comandos a seguir.

$ top

Isso mostrará todas as ações em execução no momento com seus números pid. Quando você encontra o postgres e o pid associado

$ kill pid_number

Cohart
fonte
0

Acabei de receber o mesmo problema que coloquei minha máquina ( ubuntu) para atualização e obtive o erro abaixo:

não foi possível conectar ao servidor: Esse arquivo ou diretório não está executando localmente e aceitando conexões no soquete de domínio Unix "/var/run/postgresql/.s.PGSQL.5432"?

Depois de concluir o processo de atualização, quando eu reiniciar, o erro do sistema se foi. E funcionou como charme como antes .. Acho que isso aconteceu quando a página foi atualizada e outro processo iniciado.

Gagan Gami
fonte
0

ALERTA DO SUPER NEWBIE: Estou apenas aprendendo o desenvolvimento da Web e o tutorial em particular que segui mencionado. Tenho que instalar o Postgres, mas na verdade não mencionei que tenho que executá- lo também ... Depois de abrir o aplicativo Postgres, tudo estava bem e dândi.

Lorenzo
fonte
0

A resposta de @Jagdish Barabari me deu a pista que eu precisava para resolver isso. Acontece que havia duas versões do postgresql instaladas enquanto apenas uma estava em execução. Limpar todos os arquivos do postgresql e reinstalar a versão mais recente resolveu esse problema para mim.

5280Angel
fonte
0

Eu removi / usr / lib do LD_LIBRARY_PATH e funcionou. Eu estava trabalhando no dockerfile postgres: alpine.

ddtraveller
fonte