Como definir a senha de usuário do postgresql no script bash

12

Desejo definir uma senha para o usuário padrão do servidor Postgresql postgres,. Eu fiz isso usando:

sudo -u postgres psql
# \password postgres

Quero executar esta etapa em muitas máquinas, portanto, gostaria de criar um bashscript para fazer o mesmo. Como fazer isso no bash?

saji89
fonte
A votação foi positiva: Muitas perguntas sobre falha no servidor podem ser aprendidas em documentação, livros, sites ... A pessoa que fez o voto negativo em você não o ensinará a usar o mancomando. Certifique-se de tentar man psqlno futuro.

Respostas:

9

Conforme documentado, você pode executar meta-comandos através da --commandopção

sudo -u postgres psql --command '\password postgres'

As aspas simples garantem que o shell não trate a barra invertida como um caractere de escape.

Ansgar Wiechers
fonte
Obrigado, eu apenas fiz o mesmo, mas com uma pequena diferença: sudo -u postgres psql --command "\password". Pensando, por que minha pergunta foi rejeitada?
Saji89
@ saji89: Não é meu voto negativo, mas acho que isso pode ser facilmente aprendido lendo a documentação.
Sven
@ saji89 Quando você usa aspas duplas, o shell trata a barra invertida como um caractere de escape, ou seja, como uma instrução para tratar o próximo caractere como um caractere literal e não especial. Para obter uma barra invertida literal dentro de qoutes duplos, você precisa usar "\\...".
Ansgar Wiechers
@AnsgarWiechers, Obrigado por essa correção. Mas a parte engraçada é que essa linha está funcionando para mim. Pelo que li em gnu.org/software/bash/manual/html_node/Double-Quotes.html Diz: The backslash retains its special meaning only when followed by one of the following characters: ‘$’, ‘`’, ‘"’, ‘\’, or newline.Acho que é por isso que "\password"funcionou bem.
Saji89
22

Em vez de usar o \passwordcomando psql , que espera um terminal interativo, você pode usar:

ALTER USER postgres WITH PASSWORD 'newpassword';

Digamos, através de um psql -ccomando:

sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'newpassword';"
Craig Ringer
fonte
WITH, não SET (15 caracteres)
ChocoDeveloper