Consegui administrar meu ambiente de desenvolvimento local.
Todos os meus aplicativos Rails locais agora estão fornecendo o erro:
PGError
could not connect to server: Permission denied
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?
Não tenho ideia do que causou isso.
Enquanto procurava por uma solução, atualizei todas as gemas incluídas no pacote, gemas atualizadas do sistema e MacPorts atualizados. Sem alegria
Outros relataram esse problema ao atualizar do OSX Leopard para o Lion, devido à confusão sobre qual versão do Postgres deve ser usada (por exemplo, versão do OSX ou versão do MacPorts). Estou executando o Lion há vários meses, então parece estranho que isso deva acontecer agora.
Estou relutante em mexer demais sem primeiro entender qual é o problema. Como posso depurar isso metodicamente?
Como posso determinar quantas versões do PostgreSQL estão no meu sistema, qual está sendo acessada e onde está localizada? Como faço para corrigir isso se o PostgreSQL errado estiver sendo usado?
Desculpe pelas perguntas de iniciantes. Ainda estou aprendendo como isso funciona! Obrigado por qualquer indicação.
EDITAR
Algumas atualizações com base nas sugestões e comentários abaixo.
Eu tentei executar o pg_lsclusters
que retornou um command not found
erro.
Tentei localmente meu arquivo pg_hba.conf e encontrei esses três arquivos de exemplo:
/opt/local/share/postgresql84/pg_hba.conf.sample
/opt/local/var/macports/software/postgresql84/8.4.7_0/opt/local/share/postgresql84/pg_hba.conf.sample
/usr/share/postgresql/pg_hba.conf.sample
Então, eu assumo que 3 versões do PSQL estão instaladas? Macports, OSX padrão e ???.
Eu fiz uma pesquisa pelo script de inicialização launchctl ps -ef | grep postgres
que retornou
0 56 1 0 11:41AM ?? 0:00.02 /opt/local/bin/daemondo --label=postgresql84-server --start-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper start ; --stop-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper stop ; --restart-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper restart ; --pid=none
500 372 1 0 11:42AM ?? 0:00.17 /opt/local/lib/postgresql84/bin/postgres -D /opt/local/var/db/postgresql84/defaultdb
500 766 372 0 11:43AM ?? 0:00.37 postgres: writer process
500 767 372 0 11:43AM ?? 0:00.24 postgres: wal writer process
500 768 372 0 11:43AM ?? 0:00.16 postgres: autovacuum launcher process
500 769 372 0 11:43AM ?? 0:00.08 postgres: stats collector process
501 4497 1016 0 12:36PM ttys000 0:00.00 grep postgres
Publiquei o conteúdo do postgresql84-server.wrapper em http://pastebin.com/Gj5TpP62 .
Tentei executar, port load postgresql184-server
mas recebi um erro Error: Port postgresql184-server not found
.
Ainda estou muito confuso sobre como consertar isso e aprecio qualquer indicação de "for dummies".
Obrigado!
EDIT2
Esse problema começou depois que tive alguns problemas com o daemondo. Meus aplicativos locais do Rails estavam travando com um erro de aplicativo ao longo das linhas de "daemondo gem não encontrado". Depois, passei por uma série de atualizações de pacotes, atualizações de gemas, atualizações de portas e atualizações de distribuição para tentar encontrar o problema.
Esse erro pode ser um problema do daemondo?
fonte
pg_lsclusters
e seupg_hba.conf
arquivo.Respostas:
Isso realmente parece um erro de permissão de arquivo. Soquetes de domínio Unix são arquivos e têm permissões de usuário como qualquer outro. Parece que o usuário OSX que está tentando acessar o banco de dados não possui permissões de arquivo para acessar o arquivo de soquete. Para confirmar isso, fiz alguns testes no Ubuntu e psql para tentar gerar o mesmo erro (incluído abaixo).
Você precisa verificar as permissões no arquivo de soquete e seus diretórios
/var
e/var/pgsql_socket
. Seu aplicativo Rails (usuário OSX) deve ter permissões de execução (x) nesses diretórios (de preferência conceda permissões a todos) e o soquete deve ter permissões completas (wrx). Você pode usá-lols -lAd <file>
para verificá-las e, se alguma delas for um link simbólico, será necessário verificar o arquivo ou direcionar o link apontado.Você pode alterar as permissões no diretório por conta própria, mas o soquete é configurado pelo postgres in
postgresql.conf
. Isso pode ser encontrado no mesmo diretório quepg_hba.conf
(Você precisará descobrir qual). Depois de definir as permissões, você precisará reiniciar o postgresql.EDITAR:
Fiz uma pesquisa rápida no google, na qual você pode querer verificar se é relevante. Isso pode resultar em qualquer tentativa de
find
falha no seu arquivo de configuração.http://www.postgresqlformac.com/server/howto_edit_postgresql_confi.html
Mensagens de erro:
Usuário não encontrado em pg_hba.conf
Falha na autenticação da senha do usuário:
Arquivo de soquete unix ausente:
Existe um soquete Unix, mas o servidor não está ouvindo.
Permissões de arquivo incorretas no arquivo de soquete unix :
fonte
PS
retorna os processos do postgres para que esteja em execução. Confuso!Meu pressentimento é que isso é (novamente) uma coisa do mac / OSX: o front-end e o back-end assumem um local diferente para o soquete do domínio unix (que funciona como um ponto de encontro ).
Lista de controle:
ps aux | grep postgres | grep -v grep
deve fazer o truquefind / -name .s.PGSQL.5432 -ls
(o soquete costumava estar em / tmp; você pode começar a procurar lá)Se o postgres estiver em execução e o soquete realmente existir, você poderá usar:
psql -h /the/directory/where/the/socket/was/found mydbname
(que tenta se conectar ao soquete do domínio unix)
; agora você deve receber o prompt do psql: tente
\d
e então\q
saia. Você também pode tentar:psql -h localhost mydbname
.(que tenta se conectar ao host local (127.0.0.1)
Se essas tentativas falharem devido à autorização insuficiente, você poderá alterar o pg_hba.conf (e SIGHUP ou reiniciar). Nesse caso: verifique também os logs.
Uma pergunta semelhante: Não é possível iniciar o Postgres
Nota: Se você puder acessar o prompt do psql, a solução rápida para esse problema é apenas para alterar o seu
config/database.yml
, adicione:host: localhost
ou você pode tentar adicionar:
host: /the/directory/where/the/socket/was/found
No meu caso,
host: /tmp
fonte
Tente desinstalar o pg gem (
gem uninstall pg
) e depois reinstalá-lo - se você usar o bundler, entãobundle install
, caso contráriogem install pg
. Além disso, verifique se o caminho seleciona a versão correta: o Lion possui uma versão do posgresql (versões anteriores não) e pode estar no caminho antes da versão instalada localmente (por exemplo, MacPorts, homebrew).No meu caso: instalação homebrew do postgresql, postgresql atualizado, rails, etc. e, em seguida, recebi esse erro. Desinstalar e reinstalar a pg gem fez isso por mim.
fonte
A localização do arquivo de soquete é inserida na gema em tempo de compilação. Assim, você precisa reconstruir sua pg gem.
Isso deve resolver esse problema específico.
fonte
Se você estiver recebendo um erro semelhante:
Isso pode fazer o truque (fez para mim):
O diretório especificado deve ser diferente se você não estiver usando o OSX / Brew.
Nota: Esta não é a mensagem de erro exata vista acima, mas esse encadeamento é o primeiro resultado dessa mensagem de erro.
fonte
rm -fr /usr/local/var/postgres
antes de executarinitb
rm -rf /usr/local/var/postgres
entãoinitdb /usr/local/var/postgres -E utf8
. Mas certifique-se de que o postgres não esteja sendo executado quando você fizer isso, caso contrário, o diretório será recriado quase imediatamente.o que resolveu esse erro para mim foi excluir um arquivo chamado postmaster.pid no diretório postgres. consulte minha pergunta / resposta usando o link a seguir para obter instruções passo a passo. meu problema não estava relacionado às permissões de arquivo:
psql: não foi possível conectar ao servidor: nenhum arquivo ou diretório (Mac OS X)
as pessoas que responderam a essa pergunta perderam muito jogo, obrigado por isso! votei tudo o que pude
fonte
Foi assim que resolvi a mensagem de erro, parcialmente baseada na resposta do wildplasser.
Portanto, existe meu soquete ou o que seja, mas o cliente procura:
Simplesmente faça um link simbólico para
/tmp/.s.PGSQL.5432
:Espero que isso ajude a alguém. Parece meio errado, mas ei, funciona!
fonte
sudo mkdir /var/run/postgresql
pasta (no meu caso, o id não existia e não foi criado pelo instalador para a página 9.3.X).Comecei a obtê-lo depois de atualizar para um novo postgres - não sabia que tinha arquivos de dados em espera.
Primeiro, tentei iniciar o servidor postgres:
foi assim que vi esse erro
Então, encontrei esta resposta no SO - relacionada a um erro de incompatibilidade: /server/342626/how-do-i-upgrade-postgresl-database-incompatibility-error
Foi isso que consertou
fonte
Apenas confirmando que eu tive um problema semelhante no PSQL e Django,
Parecia que meu servidor psql não foi desligado corretamente e o arquivo postmaster.pid ainda estava presente (deve ser excluído automaticamente no desligamento adequado) na minha pasta postgres.
Excluído isso e tudo de bom
fonte
psql: could not connect to server: No such file or directory.
Removerpostmaster.pid
de/usr/local/var/postgres
tudo fazia funcionar novamente.Eu estava recebendo o mesmo erro (verifica-se que houve um erro
postmaster.pid
. Veja como eu coloquei o postgres em funcionamento novamente ( crédito a Ricardo Burillo pela correção ):fonte
pg_resetxlog
arquivo de bloqueio "postmaster.pid" retornado exista.Eu tive um problema semelhante ao tentar usar o postgresql com trilhos. A atualização do meu Gemfile para usar a nova versão do gem pg resolve esse problema para mim. (gem pg versão 0.16.0 funciona). No uso do Gemfile:
em seguida, execute o seguinte para atualizar a gema
fonte
Eu li muitos tópicos sobre esse erro e a solução para mim foi simplesmente reiniciar o postgres com:
O que não é mencionado aqui.
fonte
Estou procurando a solução por um tempo. Portanto, este também corrigiu o problema para mim (reinit db):
Eu uso o OS X 10.11.3 com o brew.
fonte
Isso aconteceu comigo hoje depois que a bateria do meu Macbook morreu. Eu acho que isso pode ser causado por um desligamento inadequado. Tudo o que você precisa fazer em casos como o meu é excluir postmaster.pid
Navegue até a pasta
Verifique se postmaster.pid está presente
Remover postmaster.pid
fonte
No meu caso, nenhuma das soluções anteriores foi boa. Em vez de usar o soquete, você pode usar o número TCP
host
+port
no arquivo de configuração do Rails. Portanto, nodatabase.yml
arquivo, adicione duas linhas como aqui:Isso resolveu meu problema :)
Antes de usar essa correção:
Mas após cada reinicialização
/tmp/.s.PGSQL.5432
foi excluída e eu tive que repetir esses comandos. A solução funciona, mas é horrível, então é melhor modificar o arquivo de configuração do banco de dados Rails :)fonte
Este erro ocorreu quando eu estava configurando o Posgtres com o Django, estou usando o Back Track e ele vem com o Postgres instalado. Presumo que as configurações sejam o problema. Corrigi-o removendo-o completamente e reinstalando-o assim.
Agora execute:
para remover tudo PostgreSQL do seu sistema. Apenas limpar o pacote do postgres não é suficiente, pois é apenas um meta-pacote vazio.
Depois que todos os pacotes do PostgreSQL forem removidos, execute:
Agora você deve ser capaz de:
fonte
MacOSX aqui. Eu tive o mesmo problema depois de atualizar minha instalação postresql de uma pré-9.1 para 9.1.2 usando homebrew. (A propósito, lembre-se de despejar bancos de dados antes da atualização com pg_dump, os bancos de dados anteriores à 9.1 são incompatíveis.) Mesmo problema, mesmas mensagens de erro.
Desinstalar a pg gem fez o truque para mim. Na verdade, eu tive que dançar um pouco para descobrir o problema. Primeiro, eu fiz uma desinstalação global de gemas, limpando o baralho de todas as joias antigas (havia algumas). Em seguida, removi a página do meu Gemfile, recompensei, restaurei a referência da página e recuperei novamente.
Depois disso, funcionou como um encanto.
fonte
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
É um CAMINHO para.bash_profile
(que está no meu diretório pessoal):psql
partirPostgres93.app
. A linha (comando) é executada toda vez que o console é iniciado.3) Inicie a
Postgres93.app
partir 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_name
e outros comandos e ver que funcionava!Postgres93.app
pode ser feito para executar 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 dadosObviamente, é útil apenas para o servidor local. Ficarei feliz se essas instruções ajudarem outras pessoas que enfrentaram esse problema.
fonte
Eu tive esse problema me atormentando e, após uma investigação mais aprofundada (em execução
rake db:setup
), vi que o rails estava tentando se conectar a uma instância do postgres usada anteriormente - uma que era armazenada nas variáveis env como DATABASE_URL.O conserto:
unset DATABASE_URL
fonte: https://stackoverflow.com/a/17420624/2577622
fonte
Tentei a maioria das soluções para esse problema, mas não consegui funcionar.
Eu executei o
lsof -P | grep ':5432' | awk '{print $2}'
que mostrava o PID do processo em execução. No entanto, eu não poderia matá-lo comkill -9 <pid>
.Quando eu corri,
pkill postgresql
o processo finalmente parou. Espero que isto ajude.fonte
No OS X com Homebrew:
fonte