Comment définir le mot de passe utilisateur postgresql dans le script bash

12

Je veux mettre un mot de passe pour l'utilisateur du serveur par défaut Postgresql, postgres. Je l'ai fait en utilisant:

sudo -u postgres psql
# \password postgres

Je veux faire cette étape sur de nombreuses machines, donc je voudrais créer un bashscript pour faire de même. Comment accomplir cela en bash?

saji89
la source
A voté la question: De nombreuses questions sur Server Fault peuvent être apprises à partir de la documentation, des livres, des sites Web ... La personne qui vous a voté ne vous apprendra pas à utiliser la mancommande. N'oubliez pas d'essayer man psqlà l'avenir.

Réponses:

9

Comme indiqué, vous pouvez exécuter des méta-commandes via l' --commandoption.

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

Les guillemets simples garantissent que le shell ne traite pas la barre oblique inverse comme un caractère d'échappement.

Ansgar Wiechers
la source
Merci, je viens de faire la même chose, mais avec une différence mineure: sudo -u postgres psql --command "\password". Vous vous demandez pourquoi ma question a été rejetée.
saji89
@ saji89: Ce n'est pas mon downvote, mais je suppose que cela peut être facilement appris en lisant la documentation.
Sven
@ saji89 Lorsque vous utilisez des guillemets doubles, le shell traite la barre oblique inverse comme un caractère d'échappement, c'est-à-dire comme une instruction pour traiter le caractère suivant comme un littéral plutôt qu'un caractère spécial. Pour obtenir une barre oblique inverse littérale à l'intérieur des doubles routes, vous devez utiliser "\\...".
Ansgar Wiechers
@AnsgarWiechers, Merci pour cette correction. Mais le plus drôle, c'est que cette ligne fonctionne pour moi. D'après ce que j'ai lu sur gnu.org/software/bash/manual/html_node/Double-Quotes.html Il dit: The backslash retains its special meaning only when followed by one of the following characters: ‘$’, ‘`’, ‘"’, ‘\’, or newline.Je pense que c'est pourquoi cela "\password"a bien fonctionné.
saji89
22

Au lieu d'utiliser la \passwordcommande psql , qui attend un terminal interactif, vous pouvez utiliser:

ALTER USER postgres WITH PASSWORD 'newpassword';

Dites, via une psql -ccommande:

sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'newpassword';"
Craig Ringer
la source
AVEC, pas défini (15 caractères)
ChocoDeveloper