Cara mengatur kata sandi pengguna postgresql dalam skrip bash

12

Saya ingin menetapkan kata sandi untuk pengguna server Postgresql default postgres,. Saya melakukannya dengan menggunakan:

sudo -u postgres psql
# \password postgres

Saya ingin melakukan langkah ini di banyak mesin, jadi saya ingin membuat bashskrip untuk melakukan hal yang sama. Bagaimana mencapai ini di bash?

disajikan89
sumber
Pertanyaan ter-upgrade: Banyak pertanyaan tentang Kesalahan Server dapat dipelajari dari dokumentasi, buku, situs web ... Orang yang menurunkan Anda tidak akan mengajari Anda untuk menggunakan manperintah. Pastikan untuk mencoba man psqldi masa mendatang.

Jawaban:

9

Seperti yang didokumentasikan, Anda dapat menjalankan perintah-meta melalui --commandopsi.

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

Kutipan tunggal memastikan bahwa shell tidak memperlakukan backslash sebagai karakter pelarian.

Ansgar Wiechers
sumber
Terima kasih, saya hanya melakukan hal yang sama, tetapi dengan perbedaan kecil: sudo -u postgres psql --command "\password". Ingin tahu, mengapa pertanyaan saya dibatalkan.
saji89
@ saji89: Ini bukan downvote saya, tapi saya kira karena ini dapat dipelajari dengan mudah dengan membaca dokumentasi.
Sven
@ saji89 Ketika Anda menggunakan tanda kutip ganda, shell memperlakukan backslash sebagai karakter pelarian, yaitu sebagai instruksi untuk memperlakukan karakter berikutnya sebagai karakter literal daripada karakter khusus. Untuk mendapatkan backslash literal di dalam qoutes ganda yang harus Anda gunakan "\\...".
Ansgar Wiechers
@AnsgarWiechers, Terima kasih atas koreksi itu. Tetapi bagian yang lucu adalah bahwa kalimat itu bekerja untuk saya. Dari apa yang saya baca di gnu.org/software/bash/manual/html_node/Double-Quotes.html Dikatakan: The backslash retains its special meaning only when followed by one of the following characters: ‘$’, ‘`’, ‘"’, ‘\’, or newline.Saya pikir itu sebabnya "\password"bekerja dengan baik.
saji89
22

Alih-alih menggunakan \passwordperintah psql , yang mengharapkan terminal interaktif, Anda dapat menggunakan:

ALTER USER postgres WITH PASSWORD 'newpassword';

Katakan, melalui psql -cperintah:

sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'newpassword';"
Craig Ringer
sumber
WITH, not SET (15 chars)
ChocoDeveloper