Как установить пароль пользователя postgresql в скрипте bash

12

Я хочу установить пароль для пользователя сервера Postgresql по умолчанию postgres. Я сделал это с помощью:

sudo -u postgres psql
# \password postgres

Я хочу сделать этот шаг на многих машинах, поэтому я хотел бы создать bashскрипт для того же. Как это сделать в bash?

saji89
источник
Поднял вопрос: многие вопросы о сбое сервера можно узнать из документации, книг, веб-сайтов ... Человек, который проголосовал против вас, не научит вас использовать manкоманду. Пожалуйста, обязательно попробуйте man psqlв будущем.

Ответы:

9

Как документировано, вы можете запускать мета-команды через --commandопцию.

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

Одинарные кавычки гарантируют, что оболочка не обрабатывает обратную косую черту как escape-символ.

Ансгар Вичерс
источник
Спасибо, я просто сделал то же самое, но с небольшим отличием sudo -u postgres psql --command "\password". Интересно, почему мой вопрос был отклонен.
saji89
@ saji89: Это не мое отрицательное мнение, но я думаю, потому что это можно легко узнать, прочитав документацию.
Свен
@ saji89 Когда вы используете двойные кавычки, оболочка обрабатывает обратную косую черту как escape-символ, то есть как инструкцию для обработки следующего символа как литерала, а не специального символа. Чтобы получить буквальный обратный слеш внутри двойных кавычек, вы должны использовать "\\...".
Ансгар 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

Вместо использования команды psql \password, которая ожидает интерактивный терминал, вы можете использовать:

ALTER USER postgres WITH PASSWORD 'newpassword';

Скажем, с помощью psql -cкоманды:

sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD 'newpassword';"
Крейг Рингер
источник
WITH, а не SET (15 символов)
ChocoDeveloper