Recentemente atualizei minha máquina do Mac OS X Lion (10.7.4) para o Mountain Lion (10.8) e acho que atrapalhou minha instalação do PostgreSQL. Ele 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 consegui antes do pré-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á claramente em execução:
$ 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 banco de dados de 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 nenhum /var/pgsql_socket/
diretório, muito menos o /var/pgsql_socket/.s.PGSQL.5432
arquivo de soquete mencionado acima!?! Talvez a instalação do Mountain Lion tenha apagado isso?
$ ls -l /var/ | grep pg
drwxr-x--- 2 _postgres _postgres 68 Jun 20 16:39 pgsql_socket_alt
Como posso solucionar isso?
Descobri que tinha um problema extremamente semelhante, ou seja, que o postgres estava abrindo um soquete em
/var/pgsql_socket_alt
que nenhum dos meus softwares esperava, mas a solução para o meu problema não era apenas um problema com o meu arquivo$PATH
.Eu tive que criar o diretório
/var/pgsql_socket
, chown-o para mim mesmo e definir (localizado emunix_socket_directory
) para esse diretório, então usar o binário para iniciar o servidor postgres correto com sucesso (que é onde entra - certifique-se de resolver para , ou apenas sempre chame-o explicitamente).postgresql.conf
/usr/local/var/postgres
pg_ctl
/usr/local/bin
$PATH
which pg_ctl
/usr/local/bin/pg_ctl
Isso pode ajudar outros usuários que encontrarem essa pergunta por meio da
/var/pgsql_socket_alt
menção.Uma explicação plausÃvel e tÃpica seria que o
psql
que vem com o homebrew é/usr/local/bin/psql
diferente daquele que estaria no seu $PATH, como/usr/bin/psql
(agregado com o 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
ps
saÃda de sua pergunta: o servidor postgres está sendo executado em ummeltemi
usuário Unix, enquanto geralmente opostgres
usuário Unix dedicado é usado para isso.Tentar:
ou
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 de linha de comando.
Então, para que o psql use automaticamente o socket de sua escolha, você pode definir a variável PGHOST para o diretório que contém o socket. ou seja
Atrasado, mas achei isso útil: http://tammersaleh.com/posts/installing-postgresql-for-rails-3-1-on-lion
Isso foi para o Lion, mas eu estava tendo os mesmos problemas deste tópico depois de atualizar da 10.6.8 para o Mountain Lion e instalar o PostgreSQL via HomeBrew antes na 10.6.8. Eu também tinha a pasta misteriosa
/var/pgsql_socket_alt
pós-atualização, mas acabei de removê-la e criei/var/pgsql_socket
como sugerido por @wolftron. No entanto, essa não foi a solução final.Se eu deixasse
unix_socket_directory
em branco/comentasse empostgresql.conf
, quaisquer projetos existentes antes da atualização reclamariam que o soquete/var/pgsql_socket
estava faltando. Mas se eu alterasse conf e hard-codedvar/pgsql_socket
, quaisquer novos projetos reclamariam que o soquete/tmp
estava faltando. Muito frustrante... até que reinstaleipg gem
em um projeto pré-10.8 (gem uninstall pg && gem install pg
) e deixeiunix_socket_directory
comentado noconf
arquivo. Após uma rápidapg_ctl
reinicialização do servidor, os projetos novos e antigos funcionaram. Meu soquete pgsql vive/tmp
agora, fwiw.Nota lateral: se você estiver usando o
activerecord-postgresql-adapter
gem, desinstale-o primeiro, reinstale o pg e instaleactiverecord-postgresql-adapter
novamente.Acabei de me inscrever no dba SE, então não consigo comentar sobre o post relevante (que crock!).
No entanto, eu estava confiante de que estava no mesmo barco que @thure. Eu tinha certeza de que /usr/local/bin estava antes no meu PATH do que /usr/bin, tinha verificado com quais binários o shell tinha hash
which
etype
, etc.Eu vi os mesmos sintomas que @thure. Então tive uma epifania; Percebi que reconstruà a
pg
gem (estou usando Ruby) em um shell cujo PATH foi afetado negativamente pelo path_helper do Mac (que é executado em /etc/profile e coloca /usr/bin antes de /usr/local/bin) .Desinstalei o pg e o reinstalei em um shell cujo PATH estava correto. De repente eu poderia conectar!
Portanto, certifique-se de recompilar suas ligações de linguagem, e deixe-as encontrar a cópia correta de (presumivelmente)
pg_config
.Não consigo encontrar rapidamente o link onde encontrei esta pepita, mas funcionou para mim.
export PHOST=localhost
Ah, aqui está o link. https://stackoverflow.com/questions/13868730/socket-file-var-pgsql-socket-s-pgsql-5432-missing-in-mountain-lion-os-x-ser
Encontrei esta resposta: https://stackoverflow.com/questions/10763143/in-rails-couldnt-create-database-for-adapter-postgresql E, por mais simples que fosse, funcionou para mim
$bundle update
... voltou a funcionar.Descobri que vincular o local real ao local esperado funcionou muito bem:
ao longo das linhas da resposta aceita por @thure, mas mais simples.
Aqui está, 2016, El Capitan está lá fora, e a Apple continua mudando as coisas. O Postgres é instalado como parte do SO, e o arquivo de configuração do postgres define a propriedade unix_socket_directories em postgresql.conf como /tmp. O soquete está em /tmp/.s.PGSQL.5432. Consegui contornar o problema executando o seguinte:
Espero que isso ajude alguém.