Eu estou tentando automatizar o processo de criação de banco de dados com um script de shell e uma coisa que eu encontrei em um obstáculo ao passar uma senha para o psql . Aqui está um pouco de código do script de shell:
psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL"
Como passar uma senha de psql
forma não interativa?
bash
postgresql
command-line
Alex N.
fonte
fonte
Respostas:
A partir da documentação oficial :
...
fonte
chmod go-rwx .pgpass
Defina a variável de ambiente PGPASSWORD dentro do script antes de chamar o psql
Para referência, consulte http://www.postgresql.org/docs/current/static/libpq-envars.html
Editar
Desde o Postgres 9.2, também existe a opção de especificar uma cadeia de conexão ou URI que possa conter o nome de usuário e a senha.
Usar isso é um risco à segurança, porque a senha é visível em texto sem formatação quando se olha para a linha de comando de um processo em execução, por exemplo, usando
ps
(Linux), ProcessExplorer (Windows) ou ferramentas similares, por outros usuários.Consulte também esta pergunta em Administradores de banco de dados
fonte
space
na linha de comando antes do primeiro caractere e o comando não será armazenado no histórico do bash. Funciona para ubuntu / bash.docker run -e PGPASSWORD="$(pbpaste)" --rm postgres psql -h www.example.com dbname username -c 'SELECT * FROM table;'
em uma linha:
com comando um comando sql como
"select * from schema.table"
ou mais legível:
fonte
PGPASSWORD='password' psql ....
que também tem o benefício de a variável não estar acessível após a conclusão do comando.export PGPASSWORD=YourNewPassword
trabalhou para mim sobre outras variações.export PGPASSWORD
Soa como uma péssima idéiaCostumo preferir passar um URL para o psql :
Isso me dá a liberdade de nomear minhas variáveis de ambiente conforme desejo e evita a criação de arquivos desnecessários.
Isso requer
libpq
. A documentação pode ser encontrada aqui .fonte
No Windows:
Atribua valor a PGPASSWORD:
C:\>set PGPASSWORD=pass
Comando de execução:
C:\>psql -d database -U user
pronto
Ou em uma linha,
Observe a falta de espaço antes do &&!
fonte
-w
.PGPASSWORD=xxxx psql -U username -d database -w -c "select * from foo;"
trabalho.Isso pode ser feito criando um
.pgpass
arquivo no diretório inicial do Usuário (Linux)..pgpass
formato de arquivo:Você também pode usar curinga
*
no lugar dos detalhes.Digamos que eu queira executar
tmp.sql
sem solicitar uma senha.Com o seguinte código, você pode no arquivo * .sh
fonte
Uma alternativa ao uso da
PGPASSWORD
variável de ambiente é usar aconninfo
string de acordo com a documentação :fonte
Adicionado conteúdo de pg_env.sh ao meu .bashrc:
com adição de (conforme sugestão do usuário4653174)
fonte