Muito mais fácil:
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '{password}';"
Documentação no psql
(terminal interativo do PostgreSQL).
Seguindo o tutorial aqui: link
Estou programando a instalação do PostgreSQL no bash, mas tendo um problema quando se trata de definir a senha do usuário inicial.
Seguindo o tutorial desta parte, temos:
# Login to postgresql prompt:
sudo -u postgres psql postgres
# .. and set postgres password with following command:
postgres=# \password postgres
Enter new password:
Enter it again:
postgres=# \q
O que é ótimo, mas eu quero definir essa senha do script Bash e uma forma com a qual esse tipo de tarefa poderia geralmente usar seria Expect:
# Build the command into a variable so that we can run it later
PSQL_QUERY=$(expect -c "
set timeout 10
spawn -u postgres psql postgres -c '\\password postgres'
expect \"Enter new password:\"
send \"password\r\"
expect \"Enter it again:\"
send \"password\r\"
expect eof
");
# Run the command with automated entry
echo "$PSQL_QUERY";
Mas quando tento executar o script, recebo a seguinte saída:
root@node:/home/user# ./test.sh
send: spawn id exp6 not open
while executing
"send "password\r""
spawn sudo -u postgres psql postgres -c '\password postgres'
psql: FATAL: Peer authentication failed for user "postgres'"
O que eu realmente não entendo é porque eu sou novo no PostgreSQL e porque quando executo o seguinte:
root@node:/home/user# sudo -u postgres psql postgres -c '\password postgres'
Enter new password: <password>
Enter it again: <password>
Funciona. Alguém poderia me ajudar com a compreensão de onde eu estou indo errado com isso e como eu poderia fazer certo para que eu possa definir a nova senha de usuário "postgres" de dentro de um script bash. Obrigado antecipadamente!
Muito mais fácil:
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '{password}';"
Documentação no psql
(terminal interativo do PostgreSQL).
Tags password bash postgresql