So legen Sie das Postgresql-Benutzerkennwort im Bash-Skript fest

12

Ich möchte ein Passwort für den Standardbenutzer des Postgresql-Servers festlegen postgres. Ich habe es gemacht mit:

sudo -u postgres psql
# \password postgres

Ich möchte diesen Schritt auf vielen Computern ausführen, daher möchte ich ein bashSkript erstellen , um dasselbe zu tun. Wie erreicht man das in Bash?

saji89
quelle
Upvoted die Frage: Viele Fragen auf Server Fehler von Dokumentation erlernt werden kann, Bücher, Websites ... Die Person , die Sie downvoted nicht beibringen , die verwenden manBefehl. Bitte versuchen Sie es man psqlin Zukunft.

Antworten:

9

Wie dokumentiert können Sie Meta-Befehle über die --commandOption ausführen .

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

Die einfachen Anführungszeichen stellen sicher, dass die Shell den Backslash nicht als Escape-Zeichen behandelt.

Ansgar Wiechers
quelle
Danke, ich habe genau das Gleiche getan, aber mit einem kleinen Unterschied : sudo -u postgres psql --command "\password". Ich frage mich, warum meine Frage abgelehnt wurde.
saji89
@ saji89: Es ist nicht meine Ablehnung, aber ich denke, weil dies leicht durch Lesen der Dokumentation gelernt werden kann.
Sven
@ saji89 Wenn Sie doppelte Anführungszeichen verwenden, behandelt die Shell den Backslash als Escape-Zeichen, dh als Anweisung, das nächste Zeichen als Literal und nicht als Sonderzeichen zu behandeln. Um einen wörtlichen Backslash in doppelten Qoutes zu erhalten, müssen Sie verwenden "\\...".
Ansgar Wiechers
@AnsgarWiechers, Danke für diese Korrektur. Aber der lustige Teil ist, dass diese Linie für mich funktioniert. Nach dem, was ich unter gnu.org/software/bash/manual/html_node/Double-Quotes.html gelesen habe, heißt es: The backslash retains its special meaning only when followed by one of the following characters: ‘$’, ‘`’, ‘"’, ‘\’, or newline.Ich denke, deshalb hat es gut "\password"funktioniert.
saji89
22

Anstatt den \passwordBefehl psql zu verwenden , der ein interaktives Terminal erwartet, können Sie Folgendes verwenden:

ALTER USER postgres WITH PASSWORD 'newpassword';

Sagen Sie über einen psql -cBefehl:

sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'newpassword';"
Craig Ringer
quelle
MIT, nicht SET (15 Zeichen)
ChocoDeveloper