Continue lendo, as melhores opções vêm por último . Mas vamos esclarecer algumas coisas primeiro.
Silenciar apenas a solicitação de senha
Se o seu problema for apenas o prompt de senha, você poderá silenciá-lo. Cito o manual aqui:
-w
--no-password
Nunca emita um prompt de senha. Se o servidor exigir autenticação de senha e uma senha não estiver disponível por outros meios, como.pgpass
arquivo, a tentativa de conexão falhará. Essa opção pode ser útil em tarefas em lote e scripts em que nenhum usuário está presente para inserir uma senha. (...)
Você provavelmente não precisa de uma senha
Normalmente isso é desnecessário. O superusuário de banco de dados padrão
postgres
geralmente corresponde ao usuário do sistema com o mesmo nome. Executando o psql
desta conta não requer uma senha se o método de autenticação peer
ou ident
estão definidos em seu pg_hba.conf
Arquivo. Você provavelmente tem uma linha como esta:local all postgres peer
E geralmente também:
local all all peer
Isso significa que cada local o usuário pode fazer login em todos banco de dados como usuário do banco de dados com o mesmo nome sem senha.
No entanto , há um equívoco comum aqui. Citando novamente:
Este método é compatível apenas com conexões locais .
A ênfase em negrito é minha.
Você está se conectando a
localhost
, que não é uma "conexão local" , embora contenha a palavra "local". É uma conexão TCP/IP para 127.0.0.1. Wikipedia no localhost:
Em sistemas de computador modernos,localhost
como um nome de host se traduz em um endereço IPv4 no127.0.0.0/8
(loopback) bloco de rede, geralmente127.0.0.1
, ou::1
em IPv6.
Solução simples para conexões locais
Omita o parâmetro
-h
do psql
invocação. Citando o manual sobre psql
mais uma vez:
Se você omitir o nome do host, o psql se conectará através de um soquete de domínio Unix para um servidor no host local ou via TCP/IP paralocalhost
em máquinas que não possuem soquetes de domínio Unix.
Janelas
... não possui soquetes de domínio Unix,
pg_hba.conf
linhas começando com local
não são aplicáveis no Windows. No Windows, você se conecta via localhost
por padrão, o que nos traz de volta ao início. Se seus requisitos de segurança forem negligentes, você pode confiar em todas as conexões via
localhost
:host all all 127.0.0.1/32 trust
Eu só faria isso para depuração com conexões remotas desligadas. Para um pouco mais de segurança, você pode usar a autenticação SSPI no Windows. Adicione esta linha ao
pg_hba.conf
para conexões "locais":host all all 127.0.0.1/32 sspi
Se você realmente precisa de uma senha
Você poderia defina uma variável de ambiente , mas isso é desencorajado , especialmente para Windows. O manual:
PGPASSWORD
se comporta da mesma forma que o parâmetro de conexão de senha. O uso desta variável de ambiente não é recomendado por motivos de segurança, pois alguns sistemas operacionais permitem que usuários não root vejam as variáveis de ambiente do processo via ps; em vez disso, considere usar o~/.pgpass
arquivo (consulte a Seção 32.15).
O manual sobre
psql
:Uma
conninfo
string é uma alternativa para especificar parâmetros de conexão: $ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require"
Ou um URI , que é usado em vez de um nome de banco de dados:
$ psql postgresql://myuser:[email protected]:5432/mydb?sslmode=require
Arquivo de senha
Mas geralmente é preferível configurar um
.pgpass
arquivo em vez de colocar senhas em arquivos de script.Leia atentamente o pequeno capítulo do manual. Em particular, note que aqui ...
Um nome de host delocalhost
corresponde tanto ao TCP (nome do hostlocalhost
) e soquete de domínio Unix (pghost
vazio ou o diretório de soquete padrão) provenientes da máquina local.
O caminho exato depende do sistema. Este arquivo pode armazenar senhas para várias combinações de função e porta (cluster de banco de dados):
localhost:5432:*:myadmin:myadminPasswd
localhost:5434:*:myadmin:myadminPasswd
localhost:5437:*:myadmin:myadminPasswd
...
No Windows máquinas procuram o arquivo em:
%APPDATA%\postgresql\pgpass.conf
%APPDATA%
normalmente resolve para:C:\Documents and Settings\My_Windows_User_Name\Application Data\
.