.pgpass com o postgreSQL não está funcionando

13

Coloquei um arquivo .pgpass em /folder/.pgpass e ele se parece com isso

*:*:*:postgres:password_for_postgres

Eu tenho um script bash onde faço backup do banco de dados do postgreSQL:

#!/bin/bash
export PGPASSFILE=/folder/.pgpass
echo $PGPASSFILE
pg_dump --username=postgres --format=c --file=/backup/db/db.sqlc database

No entanto, o script ainda me solicita a senha. PGPASSFILE tem o valor que deveria, tanto quanto posso ver. Alguma dica sobre qual pode ser o problema?

/ K

Kerstin Viltersten
fonte

Respostas:

8

O arquivo pgpass está definido no modo 0600 (isto é, somente leitura / gravação pelo proprietário)? A biblioteca do cliente a ignorará se for legível por grupo ou mundo.

araqnid
fonte
5

Na minha configuração ( Ubuntu 10.04.3e PostgreSQL 8.4), finalmente consegui fazê-lo funcionar quando o nome de usuário no qual estou conectado é o mesmo que estou tentando obter uma senha do .pgpassarquivo.

Conectado como deployer, eu estava tentando usar o .pgpassarquivo para acessar o banco de dados pertencente a um nome de usuário appname, que não possui equivalente de usuário Unix. Não pude fazer o .pgpasstrabalho, até começar a usar deployercomo usuário para acessar meu banco de dados ...

Aqui está o /home/deployer/.pgpassconteúdo do meu arquivo:

*:*:*:deployer:password

Aqui uma parte desse /etc/postgresql/8.4/main/pg_hba.conf:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD                                                

# "local" is for Unix domain socket connections only                                                        
local   all         all                               md5                                                   
# IPv4 local connections:                                                                                   
host    all         all         127.0.0.1/32          md5                                                   
host    all         all         192.168.0.1/32        md5                                                   
# IPv6 local connections:                                                                                   
host    all         all         ::1/128               md5 

Como você pode ver, todas as minhas conexões requerem senha ( md5).

Com esta configuração, supondo que eu tenha um banco de dados que criei com este comando:

deployer@ubuntu-server:~$ createdb -T template0 -O deployer -E UTF8 dbname

Consigo realizar a seguinte operação sem inserir uma senha:

deployer@ubuntu-server:~$ dropdb dbname

Assim que eu mudar o nome do meu .pgpasspara .pgpass-no, será necessária uma senha.

BTW, não esqueça que seu .pgpassarquivo deve estar sob 0600permissões:

deployer@ubuntu-server:~$ ls -la .pgpass
-rw------- 1 deployer staff 24 2012-01-06 17:29 .pgpass
Romain Champourlier
fonte
2
Você pode controlar o usuário pg para conectar-se usando a -Ubandeira para dropdbecreatedb
Kevin Horn
0

1) Crie um arquivo .pgpass com conteúdo

host: 5432: somedb: someuser: somepass

2) defina as permissões usando o comando

sudo chmod 600 .pgpass

3) Defina o proprietário do arquivo como o mesmo usuário com o qual você efetuou login:

sudo chown login_username: login_username .pgpass

4) Defina a variável de ambiente PGPASSFILE:

exportar PGPASSFILE = '/ home / user / .pgpass'

Agora verifique conectando-se ao banco de dados:

psql -h host -U someuser somedb

Não solicitarei a senha e entrei no postgresql.

Shrinivas
fonte