Jak ustawić hasło użytkownika postgresql w skrypcie bash

12

Chcę ustawić hasło dla domyślnego użytkownika Postgresql serwera postgres. Zrobiłem to za pomocą:

sudo -u postgres psql
# \password postgres

Chcę zrobić ten krok na wielu komputerach, dlatego chciałbym utworzyć bashskrypt, aby zrobić to samo. Jak to zrobić w bash?

saji89
źródło
Przegłosowałem pytanie: wiele pytań na temat usterki serwera można dowiedzieć się z dokumentacji, książek, stron internetowych ... Osoba, która głosowała na ciebie, nie nauczy Cię korzystania z manpolecenia. Pamiętaj, aby spróbować man psqlw przyszłości.

Odpowiedzi:

9

Jak udokumentowano , możesz uruchamiać meta-polecenia za pomocą --commandopcji.

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

Pojedyncze cudzysłowy zapewniają, że powłoka nie traktuje ukośnika odwrotnego jako znaku ucieczki.

Ansgar Wiechers
źródło
Dzięki, ja po prostu zrobił to samo, ale z różnicy mniejszej: sudo -u postgres psql --command "\password". Zastanawiam się, dlaczego moje pytanie zostało odrzucone.
saji89,
@ saji89: To nie moja opinia, ale myślę, że można tego łatwo nauczyć się czytając dokumentację.
Sven
@ saji89 Gdy używasz podwójnych cudzysłowów, powłoka traktuje odwrotny ukośnik jako znak ucieczki, tj. jako instrukcję, aby traktować następny znak raczej jako literę niż znak specjalny. Aby uzyskać dosłowny odwrotny ukośnik w podwójnych qoutach, musisz użyć "\\...".
Ansgar Wiechers
@AnsgarWiechers, dzięki za korektę. Ale zabawne jest to, że ta linia działa dla mnie. Z tego, co przeczytałem na gnu.org/software/bash/manual/html_node/Double-Quotes.html Mówi: The backslash retains its special meaning only when followed by one of the following characters: ‘$’, ‘`’, ‘"’, ‘\’, or newline.Myślę, że właśnie dlatego "\password"działało dobrze.
saji89,
22

Zamiast używać \passwordkomendy psql , która oczekuje interaktywnego terminala, możesz użyć:

ALTER USER postgres WITH PASSWORD 'newpassword';

Powiedz za pomocą psql -cpolecenia:

sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'newpassword';"
Craig Ringer
źródło
Z, a nie SET (15 znaków)
ChocoDeveloper,