วิธีตั้งค่ารหัสผ่านผู้ใช้ postgresql ใน bash script


12

ฉันต้องการที่จะตั้งรหัสผ่านสำหรับผู้ใช้เซิร์ฟเวอร์เริ่มต้น PostgreSQL postgresที่ ฉันทำได้โดยใช้:

sudo -u postgres psql
# \password postgres

ฉันต้องการทำขั้นตอนนี้ในหลาย ๆ เครื่องดังนั้นฉันต้องการสร้างbashสคริปต์เพื่อทำสิ่งเดียวกัน วิธีการบรรลุสิ่งนี้ในทุบตี?


โหวตคำถามขึ้น: คำถามมากมายเกี่ยวกับServer Faultสามารถเรียนรู้ได้จากเอกสาร, หนังสือ, เว็บไซต์ ... คนที่ลงคะแนนคุณจะไม่สอนให้คุณใช้manคำสั่ง โปรดลองอีกครั้งman psqlในอนาคต

คำตอบ:


9

ในฐานะที่เป็นเอกสารคุณสามารถเรียกใช้คำสั่ง meta ผ่าน--commandตัวเลือก

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

เครื่องหมายคำพูดเดี่ยวรับรองว่าเชลล์ไม่ถือว่าแบ็กสแลชเป็นอักขระเลี่ยง


ขอบคุณฉันเพิ่งทำสิ่งเดียวกัน แต่มีความแตกต่างเล็กน้อย: sudo -u postgres psql --command "\password". สงสัยว่าทำไมคำถามของฉันถูกลดระดับลง
saji89

@ saji89: มันไม่ใช่ downvote ของฉัน แต่ฉันเดาเพราะมันสามารถเรียนรู้ได้ง่ายด้วยการอ่านเอกสาร
สเวน

@ saji89 เมื่อคุณใช้เครื่องหมายอัญประกาศคู่เชลล์จะถือว่าเครื่องหมายแบ็กสแลชเป็นอักขระ escape เช่นเป็นคำแนะนำในการใช้อักขระตัวถัดไปเป็นตัวอักษรแทนที่จะเป็นอักขระพิเศษ ที่จะได้รับเครื่องหมายอักษรภายใน qoutes "\\..."คู่ที่คุณต้องใช้
Ansgar Wiechers

@ AnsgarWiechers ขอบคุณสำหรับการแก้ไข แต่ส่วนที่ตลกคือบรรทัดนั้นใช้ได้กับฉัน จากสิ่งที่ฉันอ่านที่gnu.org/software/bash/manual/html_node/Double-Quotes.htmlมันพูดว่า: The backslash retains its special meaning only when followed by one of the following characters: ‘$’, ‘`’, ‘"’, ‘\’, or newline.ฉันคิดว่านั่นเป็นสาเหตุที่"\password"ทำงานได้ดี
saji89

22

แทนที่จะใช้\passwordคำสั่งpsql ซึ่งคาดว่าเทอร์มินัลแบบโต้ตอบคุณสามารถใช้:

ALTER USER postgres WITH PASSWORD 'newpassword';

พูดโดยใช้psql -cคำสั่ง:

sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'newpassword';"

ด้วยไม่ใช่ SET (15 ตัวอักษร)
ChocoDeveloper
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.