Reparando o Postgresql após a atualização para o OSX 10.7 Lion


196

Recentemente, atualizei para o OSX 10.7, quando minha instalação de trilhos funcionou completamente ao tentar conectar-me ao servidor psql. Quando faço isso na linha de comando usando

psql -U postgres

funciona totalmente bem, mas quando tento executar o servidor ou console rails com o mesmo nome de usuário e senha, recebo este erro

...activerecord-3.0.9/lib/active_record/connection_adapters/postgresql_adapter.rb:950:in `initialize': could not connect to server: Permission denied (PGError) 
Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

Qualquer idéia que possa estar acontecendo seria super útil! Obrigado!


Isso também atingiu alguém no meu escritório; tivemos um problema semelhante ao obter o binário errado, um problema adicional ao tentar conectar-se a soquetes de domínio em um diretório diferente com permissões diferentes, e parece que a atualização consumiu todos os dados no banco de dados local. Felizmente, essa era apenas uma caixa de desenvolvimento, então não é um grande negócio, mas é levemente desagradável. :)

1
Eu bati nesse aqui hoje e lembrei de ler sua pergunta ontem. É bom ver @ John Wang saiu e explicou que :)
Ryan Bigg

Respostas:


291

É uma questão de PATH. O Mac OSX Lion inclui o Postgresql no sistema agora. Se você fizer um, which psqlprovavelmente verá em usr/bin/psqlvez do usr/local/bin/psqlque é o correto da HomeBrew. Se você executar, brew doctordeverá receber uma mensagem informando que precisa adicionar usr/local/binà cabeça da sua variável env PATH.

Editando seu .bash_profile ou .profile ou qualquer shell que você esteja usando e adicionando: export PATH=/usr/local/bin:$PATH

como a primeira exportação para a PATHsessão, você encerra a shell ou origina seu arquivo source ~/.bash_profilee agora deve estar OK novamente.


12
Isso consertou. Você também pode editar / etc / caminhos e certifique-se / usr / / bin local é no topo
Greg

153
Além disso, observe que se você instalou a pg gem ANTES de corrigir seu caminho, ela usará o psql errado. Nesse caso, desinstale o pg gem e depois reinstale-o (gem uninstall pg && gem install pg).
Troy

4
Isso é para homebrew? Portas parece colocá-lo em: / opt / local / lib / postgresql91 Então, certifique-se de usar export PATH = / opt / local / lib / postgresql91 / bin: $ PATH
Antony Stubbs

1
Meu caminho estava sendo relatado corretamente, mas a solução de Troy de desinstalar a pg gem e depois permitir a reinstalação do bundler fez o truque para mim.
Tom Harrison

2
Só para esclarecer - parece que você é melhor para configurar o seu caminho corretamente, então desinstalação / reinstalação do gem pg
Jamie Cook

90

Para aqueles que estão interessados, montei a solução. Tudo que eu precisava era adicionar

host: localhost

para o database.yml para o meu ambiente e tudo foi molho.


9
tenha cuidado com isso: Essa configuração altera o acesso do soquete do domínio para uma conexão TCP. Embora provavelmente funcione, você pode perder um pouco de desempenho e portas utilizáveis ​​em sua máquina, o que pode ser um problema, dependendo da configuração. A solução fornecida por John está correta.
pilif 21/07

3
'gem uninstall pg' (escolha todas as versões) e, em seguida, 'bundle' novamente para instalar a versão pg do seu Gemfile funcionou para mim.
tmadsen

Obrigado Dave G, isso funcionou para mim também. Eu instalei a atualização 10.7.3 e o rake db: migrate reclamou. Isso consertou.
Sathish

Isso funcionou para mim também. No entanto, deixei a senha e o nome de usuário em branco.
Benjamin

Eu imagino que isso funcionaria porque força uma conexão TCP / IP.
Duma

46

Eu tive esse mesmo problema com o Mountain Lion, mas a única coisa que funcionou para mim foi essa correção :

Verifique onde está o destino real:

sudo find / -name .s.PGSQL.5432

Eu precisava criar este diretório:

mkdir /var/pgsql_socket/

Em seguida, usando o resultado da localização acima, crie este link simbólico:

ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/

Eu suspeito que, para a maioria das pessoas no Mountain Lion, você pode simplesmente criar o diretório e fazer o link simbólico e não perder tempo pesquisando, a menos que o link simbólico não funcione.

PS - meu PostgreSQL foi instalado através do instalador oficial.


Sinto que pode ser isso para mim, mas não consigo fazê-lo funcionar. Estou recebendo o seguinte: ln: / var / pgsql_socket /: Não existe esse arquivo ou diretório
Emmanuel

Desculpe, eu esqueci que também encontrei isso. Adicionado passo extra para responder.
Ben

Abençoe você, Ben. Muito apreciado.
Matt

29

Se o problema persistir após alterar o caminho (como aconteceu comigo), tente também isso ...

gem pristine pg

Parece que o problema (parcialmente) está na própria pg gem. Quando constrói, descobre onde o soquete do domínio deve estar. Se você alterar o local do soquete do domínio após o fato, ele não entrará em vigor até você reconstruir a gema.


Isso funcionou para mim, mesmo depois que eu consertei o PATH e reinstalei a pg gem sem usar a impressora.
precisa saber é o seguinte

Obrigado por esta dica, Darren
bhinks

15

Para quem instalou diretamente do instalador oficial, apenas adicionar o host ao comando funciona sem alterações de caminho:

psql -h localhost -U postgres

5

Eu tinha o mesmo problema e estava tendo problemas para fazer a solução de John Wang funcionar. Como Darren observou, há um problema com a pg gem. Para fazê-lo funcionar, eu precisava:

gem uninstall pg

Então reinstale.

O que deu certo.


Eu tive que executar isso duas vezes ... estranho. Eu desinstalei o pg, instale a instalação do pacote e falhou. Então apenas gem instalou o pg e funcionou. Obrigado!
quer

3

Também me deparei com isso, mas eu mesmo havia instalado o postgres (não com o homebrew). Se for esse o caso, você precisa encontrar o caminho antigo para o psql (que pode ser / usr / local / bin, mas para mim era / usr / local / pgsql / bin) e anexá-lo ao seu $ PATH.

(antes) which psql=> / usr / bin / psql

(correção) PATH de exportação = / usr / local / psql / bin: $ PATH

(after) `what psql '=> / usr / local / psql / bin

A sugestão de John Wang de source ~/.bash_rcadicionar posteriormente ao seu bash_rc é dourada.



1

Não estou satisfeito com as respostas mais votadas, pois elas são específicas do usuário do SO ou remapiam o Postgres para usar TCP em vez de soquetes de domínio, conforme apontado por @pilif. Eu vi outra solução que envolve reordenar os caminhos padrão no nível do sistema para verificar o caminho do Brew antes de um caminho principal do sistema, mas isso parece perigoso, pois pode afetar todas as outras colisões de nomes de aplicativos como esta.

Este site detalha uma solução que meu colega encontrou. Tudo se resume a executar um único script de shell que

  1. faça backup dos arquivos do Postgres 8.4 em um diretório separado
  2. vincular a instalação do Postgres à publicação

Isso vem com a ressalva de que o Postgres padrão do sistema é o que o brew instalou, então você deve fazer um julgamento sobre se isso é adequado para você. Não me vejo precisando do Postgres 8.4 especificamente sobre 9.x, mas o YMMV


1

Outra solução possível que funcionou para mim é redefinir o arquivo postmaster, excluindo-o. Basta executar:

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

Vale a pena verificar o log em busca de erros que você pode encontrar aqui:

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

A mensagem de erro que eu estava recebendo era:

FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 161) running in data directory 
"/usr/local/var/postgres"?

Tudo funcionou muito bem depois.


Eu tive o problema apenas na linha de comando. A remoção do arquivo /usr/local/var/postgres/postmaster.pid resolveu meu problema.
Michael A.

0

No meu caso, o servidor não foi iniciado devido a configurações incorretas de memória compartilhada. No começo, fiquei confuso porque havia vários processos do postgres em execução, mas esses eram processos padrão do sistema. Olhe parapostmaster processos!

Tudo o que eu precisava fazer era alterar as configurações de memória compartilhada . Brincar com as configurações do caminho não era necessário no meu caso.


0

Pode ser necessário especificar o host do seu banco de dados.


0

Se você gosta de uma mudança permanente no seu $ PATH, tente o seguinte:

defaults write $HOME/.MacOSX/environment PATH "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/opt/local/bin"

isso irá reescrever o seu ~/.MacOSX/environment.plist.


0

Eu sou novo no Rails, mas adicionar o seguinte ao database.yml funcionou para mim:

host: localhost

port: 5432

Não sei por que o Rails padroniza soquetes de domínio em vez de TCP, enquanto o PostgreSQL não configura soquetes de domínio por padrão.


0

Meu PostgreSQL está instalado em / Library / PostgreSQL, para que / usr / var não funcione para mim.

Parece que o Woz está correto, porque sempre que fecho a tampa do meu macbook pro, ele trava ... Aqui está o que funcionou após o travamento para mim:

sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"
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.