Como posso fazer com que o pg_dump seja autenticado corretamente

98

Eu tentei usar variável do host PGPASSWORDe .pgpasse nenhum destes dois vai permitir-me para autenticar no banco de dados. Eu tenho chmod'd .pgpasspara permissões apropriadas e também tentou:

export PGPASSWORD=mypass and PGPASSWORD=mypass

A senha contém um \no entanto, eu estava colocando-a entre aspas simples PGPASS='mypass\'e ainda não autenticou.

Estou correndo:

pg_dump dbname -U username -Fc

e eu ainda recebo

pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL:  Peer authentication failed for user "username"
Kosmonaut
fonte
1
Essa parte "... autenticação de mesmo nível ..." da mensagem de erro significa que ela não está usando autenticação de senha .
Milen A. Radev

Respostas:

197

A Solução Rápida

O problema é que ele está tentando realizar a peerautenticação local com base em seu nome de usuário atual. Se desejar usar uma senha, você deve especificar o nome do host com -h.

pg_dump dbname -U username -h localhost -F c

Explicação

Isso se deve ao seguinte em seu pg_hba.conf

local   all             all                                     peer
host    all             all             127.0.0.1/32            md5

Isso diz ao Postgres para usar peerautenticação para usuários locais, o que requer o nome de usuário do postgres para corresponder ao seu nome de usuário do sistema atual. A segunda linha refere-se a conexões usando um nome de host e permitirá que você autentique com uma senha por meio do md5método.

Minha configuração de desenvolvimento preferida

NOTA : Isso só deve ser usado em estações de trabalho de usuário único. Isso pode levar a uma grande vulnerabilidade de segurança em uma máquina de produção ou multiusuário.

Ao desenvolver em uma instância local do postgres, gosto de alterar meu método de autenticação local para trust. Isso permitirá a conexão com o postgres por meio de um soquete unix local como qualquer usuário sem senha. Isso pode ser feito simplesmente alterando peeracima truste recarregando o postgres.

# Don't require a password for local connections
local   all             all                                     trust
Jim Mitchener
fonte
6
Para qualquer um que não tenha certeza de onde está o seu arquivo conf: use sudo locate pg_hba.conf- ele tem que ser sudo, já que o usuário postgres será o único com acesso ao diretório (eu acho).
jcollum
seu comando funcionou para mim, mas não consigo descobrir onde está, ou qual é o nome do arquivo, como posso encontrar esse arquivo?
Sobhan
-1

Às vezes você pode usar

sudo -u postgres pg_dump ...
Roland Pihlakas
fonte