Estou recebendo o erro:
FATAL: Peer authentication failed for user "postgres"
quando tento fazer o postgres funcionar com o Rails.
Aqui está o meu pg_hba.conf
, o meu database.yml
e uma cópia do rastreamento completo .
Mudei a autenticação para md5 em pg_hba e tentei coisas diferentes, mas nenhuma parece funcionar.
Também tentei criar um novo usuário e banco de dados de acordo com o Rails 3.2, FATAL: A autenticação de pares falhou para o usuário (PG :: Error)
Mas eles não aparecem no pgadmin ou mesmo quando eu corro sudo -u postgres psql -l
.
Alguma idéia de onde estou errado?
ruby-on-rails
postgresql
orderof1
fonte
fonte
localhost
mas é bem-sucedida127.0.0.1
.host: localhost
odatabase.yml
arquivo.Respostas:
O problema ainda é o seu
pg_hba.conf
arquivo (/etc/postgresql/9.1/main/pg_hba.conf*
).Está linha:
Deveria estar:
* Se você não conseguir encontrar esse arquivo, a execução
locate pg_hba.conf
deverá mostrar onde está o arquivo.Após alterar este arquivo, não se esqueça de reiniciar o servidor PostgreSQL. Se você estiver no Linux, seria
sudo service postgresql restart
.Estas são breves descrições de ambas as opções, de acordo com os documentos oficiais do PostgreSQL sobre métodos de autenticação .
Autenticação de mesmo nível
Autenticação de senha
Exemplo de local para
pg_hba.conf
:/etc/postgresql/9.1/main/pg_hba.conf
fonte
/etc/init.d/postgresql reload
/etc/postgresql/9.1/main/pg_hba.conf
sudo service postgreql restart
também funciona.Depois de instalar o Postgresql, executei as etapas abaixo.
abra o arquivo
pg_hba.conf
para o Ubuntu/etc/postgresql/9.x/main
e altere esta linha:para
Reinicie o servidor
Entre no psql e defina sua senha
Por fim, mude
pg_hba.conf
depara
Após reiniciar o servidor postgresql, você pode acessá-lo com sua própria senha
Detalhes dos métodos de autenticação:
para mais informações, consulte aqui
fonte
sudo passwd postgres
Se você se conectar através do host local (127.0.0.1), não deverá enfrentar esse problema específico. Eu não mexeria muito com o pg_hba.conf, mas em vez disso eu ajustaria sua string de conexão:
onde someuser é seu usuário com o qual você está se conectando e database é o banco de dados ao qual o usuário tem permissão para se conectar.
Aqui está o que eu faço no Debian para configurar o postgres:
Aproveitar!
fonte
host: 127.0.0.1
de falta para localhost no config / database.yml - é na mesma máquina, então eu não entendo por queIsso tem funcionado para mim !!
fonte
Se você tiver um problema, precisará localizá-lo
pg_hba.conf
. O comando é:find / -name 'pg_hba.conf' 2>/dev/null
e depois altere o arquivo de configuração:
Postgresql 9.3
Postgresql 9.4
A próxima etapa é: Reiniciando sua instância do db:
service postgresql-9.3 restart
Se você tiver algum problema, precisará definir a senha novamente:
ALTER USER db_user with password 'db_password';
fonte
No meu caso:
Portanto, isso será alterado para:
Login administrativo do banco de dados pelo soquete de domínio Unix local, todos os pares do postgres
Este:
Login administrativo do banco de dados pelo soquete de domínio Unix local all postgres md5
Em seguida, reinicie o servidor pg:
$> sudo service postgresql restart
Abaixo está uma lista de MÉTODOS usados para conectar-se ao postgres:
Nota: Se você não criou seu usuário do postgres ainda. Crie isso e agora você pode acessar o servidor postgres usando as credenciais do usuário.
DICA: Se não funcionar após a reinicialização do postgres, feche o terminal e abra novamente.
fonte
Isso resolveu meu problema
fonte
Eu tive o mesmo problema.
A solução da depa está absolutamente correta.
Apenas certifique-se de ter um usuário configurado para usar o PostgreSQL.
Verifique o arquivo:
A permissão deste arquivo deve ser dada ao usuário com o qual você registrou seu psql.
Mais longe. Se você é bom até agora ..
Atualize de acordo com as instruções do @ depa.
ie
e depois faça as alterações.
fonte
-rw-r----- 1 postgres postgres 4640 Jun 16 09:59 /etc/postgresql/9.5/main/pg_hba.conf
Se você deseja manter a configuração padrão, mas deseja autenticação md5 com conexão de soquete para uma conexão específica de usuário / banco de dados, adicione uma linha "local" ANTES da linha "local tudo / tudo":
fonte
Eu estava movendo o diretório de dados em um servidor clonado e tendo problemas para fazer login como postgres. Redefinir a senha do postgres como esta funcionou para mim.
fonte
As edições acima funcionaram para mim, depois que eu descobri que precisava reiniciar o servidor postgres depois de fazê-las. Para o ubuntu:
fonte
Alterar o par METHOD para confiar no pg_hba.conf (/etc/postgresql/9.1/main/pg_hba.conf | line 85) resolve o problema. A adição de md5 solicita uma senha; portanto, se houver um requisito para evitar o uso de senhas, use confiança em vez de md5 .
fonte
Use
host=localhost
em conexão.fonte
o comando abaixo funciona para mim:
fonte
-W --password Force psql to prompt for a password before connecting to a database. This option is never essential, since psql will automatically prompt for a password if the server demands password authentication. However, psql will waste a connection attempt finding out that the server wants a password. In some cases it is worth typing -W to avoid the extra connection attempt.
Você precisa apenas definir METODO para confiar.
E recarregue o servidor postgres.
Alterações no pg_hba.conf não exigem o servidor RESTART postgres. apenas RELOAD.
fonte
Muitas das outras respostas referem-se às configurações nos vários arquivos de configuração, e as que pertencem a
pg_hba.conf
elas se aplicam e são 100% corretas. No entanto, verifique se você está modificando os arquivos de configuração corretos .Como outros usuários mencionaram, os locais do arquivo de configuração podem ser substituídos por várias configurações dentro do arquivo de configuração principal, além de fornecer um caminho para o arquivo de configuração principal na linha de comando com a
-D
opçãoVocê pode usar o seguinte comando durante uma sessão do psql para mostrar onde seus arquivos de configuração estão sendo lidos (supondo que você possa iniciar o psql). Esta é apenas uma etapa de solução de problemas que pode ajudar algumas pessoas:
Você também deve se certificar de que o diretório inicial do usuário do postgres esteja onde você espera. Digo isso porque é muito fácil ignorar isso, porque o prompt será exibido '
~
' em vez do caminho real do diretório inicial, tornando-o não tão óbvio. Muitas instalações padronizam o diretório inicial do usuário do postgres/var/lib/pgsql
.Se não estiver definido como deveria, pare o serviço postgresql e use o seguinte comando enquanto estiver conectado como root. Verifique também se o usuário do postgres não está conectado a outra sessão:
Por fim, verifique se sua variável PGDATA está definida corretamente, digitando
echo $PGDATA
, o que deve gerar algo semelhante a:Se não estiver definido ou mostrar algo diferente do que você espera, examine os arquivos de inicialização ou RC, como .profile ou .bash.rc - isso variará bastante, dependendo do sistema operacional e do shell. Depois de determinar o script de inicialização correto para sua máquina, você pode inserir o seguinte:
Para o meu sistema, coloquei isso
/etc/profile.d/profile.local.sh
para que fosse acessível a todos os usuários.Agora você deve conseguir iniciar o banco de dados normalmente e todas as suas configurações de caminho psql devem estar corretas!
fonte
O pg_config é para informações de compliação, para ajudar extensões e programas clientes a serem compilados e vinculados ao PostgreSQL. Ele não sabe nada sobre as instâncias ativas do PostgreSQL na máquina, apenas os binários.
O pg_hba.conf pode aparecer em muitos outros lugares, dependendo de como o Pg foi instalado. O local padrão é pg_hba.conf dentro do diretório de dados do banco de dados (que pode estar em / home, / var / lib / pgsql, / var / lib / postgresql / [versão] /, / opt / postgres / etc etc) mas usuários e empacotadores podem colocá-lo onde quiserem. Infelizmente.
As únicas maneiras válidas de encontrar o pg_hba.conf é perguntar a uma instância do PostgreSQL em execução onde está o pg_hba.conf, ou perguntar ao sysadmin onde está. Você não pode nem perguntar onde está o datadir e analisar o postgresql.conf porque um script init pode passar um parâmetro como -c hba_file = / some / other / path ao iniciar o Pg.
O que você quer fazer é perguntar ao PostgreSQL:
Este comando deve ser executado em uma sessão de superusuário, portanto, para scripts de shell, você pode escrever algo como:
e defina as variáveis de ambiente PGUSER, PGDATABASE, etc. para garantir que a conexão esteja correta.
Sim, isso é um problema de galinha e ovo, pois se o usuário não conseguir se conectar (digamos, depois de estragar a edição do pg_hba.conf), você não poderá encontrar o pg_hba.conf para corrigi-lo.
Outra opção é examinar a saída do comando ps e ver se o argumento do diretório de dados postmaster -D está visível lá, por exemplo
desde que o pg_hba.conf esteja dentro do diretório de dados (a menos que você esteja no Debian / Ubuntu ou em algum derivado e use seus pacotes).
Se você está direcionando especificamente sistemas Ubuntu com o PostgreSQL instalado a partir de pacotes Debian / Ubuntu, fica um pouco mais fácil. Você não precisa lidar com a página compilada manualmente a partir da fonte para a qual alguém iniciou um datadir em seu diretório pessoal ou com uma instalação do EnterpriseDB em / opt, etc. Você pode perguntar ao pg_wrapper, o multi-servidor Debian / Ubuntu gerenciador de versões, onde o PostgreSQL está usando o comando pg_lsclusters de pg_wrapper.
Se você não conseguir se conectar (o Pg não está em execução ou precisar editar o pg_hba.conf para se conectar), será necessário procurar no sistema os arquivos pg_hba.conf. No Mac e Linux, algo como o sudo find / -type f -name pg_hba.conf fará. Em seguida, verifique o arquivo PG_VERSION no mesmo diretório para garantir que seja a versão correta do PostgreSQL, se você tiver mais de um. (Se pg_hba.conf estiver em / etc /, ignore isso, é o nome do diretório pai). Se você tiver mais de um diretório de dados para a mesma versão do PostgreSQL, precisará analisar o tamanho do banco de dados, verifique a linha de comando dos postgres em execução do ps para ver se é o diretório de dados - o argumento D corresponde a onde você está editando, etc. . /ubuntu/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711
fonte
Meu problema foi que eu não digitei nenhum servidor. Eu pensei que é um padrão por causa do espaço reservado, mas quando eu digitei localhost ele funcionou.
fonte
Se você estiver tentando localizar esse arquivo no Cloud 9, poderá fazer
Pressione
I
para editar / inserir, pressioneESC
3 vezes e digite:wq
irá salvar o arquivo e sairfonte
Se você está enfrentando esse problema com rails e sabe que já criou esse nome de usuário com senha, juntamente com os direitos corretos, basta seguir o final do seu arquivo database.yml.
arquivo geral será semelhante abaixo
Você não precisa tocar em seu
pg_hba.conf
arquivo. Feliz codificaçãofonte
Solução mais simples sem alterar as configurações. (ubuntu) Altere o usuário e conecte-se ao CLI do banco de dados.
retirado de https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-18-04
fonte