O PostgreSQL está sendo executado localmente, mas não consigo conectar. Por quê?

32

Atualizei recentemente minha máquina do Mac OS X Lion (10.7.4) para o Mountain Lion (10.8) e acho que funcionou na minha instalação do PostgreSQL. Foi instalado originalmente via Homebrew. Eu não sou um DBA, mas espero que alguém possa me dizer como solucionar isso.

Não consigo me conectar (mas antes de antes do Mountain Lion):

$ psql -U rails -d myapp_development
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

Mas o Postgres ainda está funcionando claramente:

$ ps aux | grep postgres
meltemi          2010   0.0  0.0  2444124   5292   ??  Ss   Wed01PM   0:00.02 postgres: rails myapp_development [local] idle    
meltemi           562   0.0  0.0  2439312    592   ??  Ss   Wed12PM   0:02.28 postgres: stats collector process       
meltemi           561   0.0  0.0  2443228   1832   ??  Ss   Wed12PM   0:01.57 postgres: autovacuum launcher process       
meltemi           560   0.0  0.0  2443096    596   ??  Ss   Wed12PM   0:02.89 postgres: wal writer process       
meltemi           559   0.0  0.0  2443096   1072   ??  Ss   Wed12PM   0:04.01 postgres: writer process       
meltemi           466   0.0  0.0  2443096   3728   ??  S    Wed12PM   0:00.85 /usr/local/bin/postgres -D /usr/local/varpostgres -r /usr/local/var/postgres/server.log

E está respondendo a consultas (tanto para um banco de dados de teste quanto para o desenvolvimento) de um aplicativo Rails local

  User Load (0.2ms)  SELECT "users".* FROM "users" 
  Rendered users/index.html.haml within layouts/application (1.3ms)

Parece não haver /var/pgsql_socket/diretório, muito menos o /var/pgsql_socket/.s.PGSQL.5432arquivo de soquete mencionado acima!?! Talvez a instalação do Mountain Lion tenha acabado com isso?

$ ls -l /var/ | grep pg
drwxr-x---   2 _postgres  _postgres    68 Jun 20 16:39 pgsql_socket_alt

Como posso solucionar isso?

Meltemi
fonte
Não é um administrador do postgres, mas um arquivo de soquete ausente parece correto. Crie o diretório / var / pgsql_socket (com seu usuário tendo permissões de gravação) e reinicie o servidor. Veja se isso corrige o problema #
Derek Downey
Pergunta relacionada sobre SO . Parece que a Apple não fez um ótimo trabalho com a atualização.
Erwin Brandstetter
existe alguma menção de um arquivo de soquete sendo criado no arquivo de log /usr/local/var/postgres/server.log?
26412
@ErwinBrandstetter Como você espera que a Apple faça um "bom trabalho" ao atualizar aplicativos nix * de terceiros instalados manualmente?
26412
@ Phil - nenhuma menção. Estou começando a pensar que isso pode ser um problema de variável de caminho. Eu acho que minhas $PATHalterações com a atualização /usr/binestão à frente /usr/local/bine acho que o Mountain Lion pode vir com o PostgreSQL pré-instalado!?! Investigando ...
Meltemi

Respostas:

30

Eu descobri que tinha um problema extremamente semelhante, ou seja, que o postgres estava abrindo um soquete /var/pgsql_socket_altonde nenhum dos meus softwares esperava procurar, mas a solução para o meu problema não era apenas um problema para o meu $PATH.

Eu tive que criar o diretório /var/pgsql_socket, chown-lo para mim mesmo, e conjunto unix_socket_directoryna postgresql.conf(localizado no /usr/local/var/postgres) para esse diretório, em seguida, usar o pg_ctlbinário /usr/local/binpara iniciar o servidor postgres direito com sucesso (que é onde $PATHvem - Certifique-se which pg_ctlresolve a /usr/local/bin/pg_ctl, ou apenas sempre chame explicitamente).

Isso pode ajudar outros usuários que encontrarem essa pergunta por meio da /var/pgsql_socket_altmenção.

Vai
fonte
Interessante. Você também está no Mountain Lion? Você instalou o PostgreSQL com o Homebrew? Em caso afirmativo, pergunto-me se mais alguém pode verificar esta solução em vez de alterar minha $PATHcomo eu fiz.
Meltemi
Sim, sim, e espero que sim!
Will
@wolftron, sua solução foi excelente para mim (Mountain Lion, homebrew / postgres, / var / pgsql_socket_alt, os nove). Esta é uma nova edição do Mountain Lion com homebrew? Vou abrir um ingresso com eles, se você acha.
Parece que recebemos a confirmação de @Jamie.
Will
Posso confirmar esse problema e a solução na instalação do OS X 10.8.2 / brew do postgresql 9.2.1.
Hartwig
8

Uma explicação plausível e típica seria que o psqlque vem com o homebrew é /usr/local/bin/psqldiferente do que seria no seu $ PATH, como /usr/bin/psql(incluído no OS X). Você pode tentar com o caminho completo:

$ /usr/local/bin/psql -U rails -d myapp_development

Além disso, há algo bastante incomum na pssaída da sua pergunta: o servidor postgres está sendo executado sob um meltemiusuário Unix, enquanto geralmente o postgresusuário Unix dedicado é usado para isso.

Daniel Vérité
fonte
Além disso, _postgres(com sublinhado) para usuário / grupo são desconhecidos para mim. Isso é um artefato ou esperado?
Erwin Brandstetter
Sim, parece ser um $PATHproblema, como você afirmou. As coisas funcionam como antes quando eu uso /usr/local/bin/psqlpara acessar o banco de dados. O Lion não tinha um sistema PostgreSQL ou meu $ PATH foi configurado de maneira diferente. Faz um ano desde a última vez que me atrapalhei com isso, então não me lembro exatamente. Quanto ao usuário Unix ... com uma instalação Homebrew do PostgreSQL, o servidor é iniciado pelo launchd e o usuário é definido como o usuário local que o instalou, por padrão. As coisas são configuradas de maneira diferente no Mac OS X Server, que inicia automaticamente o PostgreSQL postgres.
22412 Meltemi
4

Não conheço nenhum arquivo de configuração para o cliente psql. No entanto, o psql respeita várias variáveis ​​de ambiente que se correlacionam com as opções da linha de comandos.

Portanto, para que o psql use automaticamente o soquete de sua escolha, você pode definir a variável PGHOST no diretório que contém o soquete. ie

PGHOST=/var/pgsql_socket_alt
psql -d mydatabsase
happynix
fonte
1
Não está documentado em nenhum lugar que eu possa achar que você pode definir PGHOST no diretório em que os arquivos de soquete residem. Mas isso realmente funciona. Obrigado!
Andrew Schulman
3

Experimentar:

psql -U rails -d myapp_development -h localhost

ou

psql -U rails -d myapp_development -h 127.0.0.1
Miguel
fonte
3

Tarde, mas achei útil: http://tammersaleh.com/posts/installing-postgresql-for-rails-3-1-on-lion

Isso era para o Lion, mas eu estava tendo os mesmos problemas do que este tópico depois de atualizar da 10.6.8 para o Mountain Lion e instalar o PostgreSQL via HomeBrew antes, na versão 10.6.8. Eu também tinha a /var/pgsql_socket_altpasta misteriosa pós-atualização, mas eu a removi e criei /var/pgsql_socketcomo sugerido por @wolftron. No entanto, essa não foi a solução final.

Se eu deixasse em unix_socket_directorybranco / comentei postgresql.conf, quaisquer projetos existentes antes da atualização reclamariam que o soquete /var/pgsql_socketestava ausente. Mas se eu mudasse conf e codificasse var/pgsql_socket, quaisquer novos projetos reclamariam que o soquete /tmpestava ausente. Muito frustrante ... até que eu reinstalei pg gemem um projeto anterior à 10.8 ( gem uninstall pg && gem install pg) e deixei o unix_socket_directorycomentário em confarquivo. Após uma rápida pg_ctlreinicialização do servidor, os projetos novos e antigos funcionaram. Meu soquete pgsql mora /tmpagora, fwiw.

Nota: se você estiver usando o activerecord-postgresql-adaptergem, desinstale-o primeiro, depois reinstale a página e instale activerecord-postgresql-adapternovamente.


fonte
2

Acabei de me inscrever no dba SE, por isso não parece ser capaz de comentar sobre o post relevante (que besteira!).

No entanto, eu estava confiante de que estava no mesmo barco que o @thure. Eu tinha certeza de que o / usr / local / bin estava mais cedo no meu PATH do que o / usr / bin, havia verificado com quais binários o shell havia feito o hash com whiche type, etc.

Eu vi os mesmos sintomas do @thure. Então eu tive uma epifania; Percebi que havia reconstruído a pggema (estou usando Ruby) em um shell cujo PATH havia sido afetado adversamente pelo path_helper do Mac (que é executado em / etc / profile e coloca / usr / bin antes de / usr / local / bin) .

Desinstalei o pg e reinstalei-o em um shell cujo PATH estava correto. De repente eu consegui me conectar!

Portanto, recompile as pessoas que vinculam o idioma e deixe que elas encontrem a cópia correta de (presumivelmente) pg_config.

Graham Ashton
fonte
1

Eu descobri que o link simbólico do local real para o local esperado funcionou perfeitamente:

sudo ln -s /var/pgsql_socket_alt /var/pgsql_socket

na linha da resposta aceita por @thure, mas mais simples.

Danny Roberts
fonte
1

Aqui está, 2016, El Capitan está lá fora, e a Apple continua mudando as coisas. O Postgres é instalado como parte do sistema operacional e o arquivo de configuração do postgres define a propriedade unix_socket_directories no postgresql.conf para / tmp. O soquete está em /tmp/.s.PGSQL.5432. Consegui solucionar o problema executando o seguinte:

sudo ln -s /tmp /var/pgsql_socket

Espero que isso ajude alguém.

rdiddly
fonte
1

Procure o arquivo de soquete correto

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

No resultado, obtenha o caminho para o arquivo e use o caminho com o parâmetro "-h" no comando psql

Por exemplo, é assim que eu me conecto ao banco de dados de calendário e contatos do servidor macOS (em uma sessão ssh no servidor):

sudo psql -U _calendar -h /private/var/run/caldavd/PostgresSocket/ -d caldav

Em seguida, o arquivo de soquete no caminho seria usado para conectar.

Olaf Seifert
fonte
1

Por padrão, o postgres parece estar tentando se conectar através de soquetes de domínio unix. SOQUETE DE DOMÍNIO UNIX

Isso aconteceu comigo quando eu estava executando a instância do postgres no docker. Você precisa ver que tipo de conexão o servidor está aceitando. Para mim, era claramente soquete de domínio TCP e não unix.

A adição de sinalizador para aceitar o host redirecionou a conexão para corrigir o caminho e corrigiu o problema.

psql -U username -p port -h host

PS: soquetes de domínio Unix funcionam no nível do kernel e a conexão não precisa passar por todo o jazz necessário para as conexões TCP. Eles são bem rápidos e eficientes quando você deseja fazer a conexão com sua própria máquina a partir de um processo diferente, como parte da Comunicação entre processos.

Sudip Bhandari
fonte
0

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 executado sempre que o sistema for iniciado.

5) Além disso, se você deseja 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.

crazzyaka
fonte
0

Eu recebi o mesmo erro ao tentar executar psqlna linha de comando. Aconteceu que minha solução era muito mais simples. Eu configurei incorretamente a porta de escuta no arquivo de configuração: /etc/postgresql/9.4/main/postgres.conf . Alterei a porta de porta = 5432 para porta = 5433. Quando a alterei novamente para 5432, ela funcionou conforme o esperado.

Para testar se você fez algo semelhante, você pode executar $ psql -p5433 Há várias opções úteis como esta para o comando psql que você pode encontrar aqui: http://www.postgresql.org/docs/9.4/static/app-psql .html para que você possa testar sua própria configuração incorreta. Obviamente, você pode simplesmente remover seu último conjunto de alterações de configuração dos arquivos * .conf, para testar se essa é a fonte do seu problema. Eu acho que certamente vale a pena conferir antes de você mexer com permissões de arquivos e propriedades. (Apenas não se esqueça de /etc/init.d/postgresql restart)

O que NÃO consegui encontrar foi o arquivo de configuração que define os valores padrão para o comando da CLI psql. Alguém pode comentar com isso, por favor?

Para mim, sempre volto ao meu primeiro princípio de programação: "Normalmente sou a fonte de qualquer erro!"

MaybeWeAreAllRobots
fonte