Como tornar o psql padrão para o host local?

10

Eu tenho o seguinte cenário:

saji@geeklap:~$ psql -U postgres
psql: FATAL:  Ident authentication failed for user "postgres"

saji@geeklap:~$ psql -h localhost -U postgres
Password for user postgres: 
psql (8.4.14)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

postgres=# 

Estou tentando fazer login no postgresqlservidor instalado no meu sistema como usuário postgres. Só consigo fazer login se eu especificar -h localhost. Considerando que a psqldocumentação diz que:

Se você omitir o nome do host, o psql se conectará por meio de um soquete de domínio Unix a um servidor no host local ou via TCP / IP ao host local em máquinas que não possuam soquetes de domínio Unix.

Ref: http://www.postgresql.org/docs/current/static/app-psql.html#R2-APP-PSQL-CON

Por que não consigo fazer login sem especificar o host? Existe algum arquivo de configuração que precisa de alguma alteração para que as coisas ocorram, conforme descrito na psqldocumentação?

saji89
fonte
Crie um .psqlrcque especifique os padrões - ou apenas edite pg_hba.confpara usar a md5autenticação para localconexões (soquete unix). Veja a documentação para pg_hba.confe psql.
Craig Ringer

Respostas:

7

De fato, funciona como documentado.

Quando o nome do host é omitido, ele se psqlconecta ao soquete do domínio Unix, cujo caminho é compilado. Essa parte funciona no seu caso; caso contrário, seria exibida uma mensagem de erro diferente da que a pergunta mostra.

A mensagem de erro na pergunta:

psql: FATAL:  Ident authentication failed for user "postgres"

está relacionado ao fato de que apenas o usuário postgres do Unix tem permissão para se conectar como usuário postgres ao usar um soquete de domínio Unix. Isso está configurado no pg_hba.confarquivo

o que você normalmente deve fazer no Ubuntu quando estiver logado como usuário normal, mas você é o administrador do sistema:

$ sudo -u postgres psql
Daniel Vérité
fonte
1
Obrigado .. Por favor, mude sudo -u postgresql psqlpara sudo -u postgres psql. Eu tentei editar. Mas não foi possível, pois a edição tem apenas <6 caracteres.
Saji89
13

Se você não gosta do padrão de conexão através de um soquete unix, pode definir a variável de ambiente PGHOST. eu tenho

export PGHOST="db"

no meu ~/.bashrc, para conectar ao servidor com esse nome. Algumas variáveis ​​de ambiente mais práticas estão documentadas em http://www.postgresql.org/docs/9.5/static/libpq-envars.html

Andrew
fonte