Создавать нового пользователя postgres программно, без интерактивного вмешательства

Я пытаюсь сделать это в script:

» sudo -u postgres createuser -PE -s user1
Enter password for new role:

Я не хочу, чтобы postgres запрашивал пароль в интерактивном режиме, поэтому я хочу:

» sudo -u postgres createuser -PE -s user1 < /tmp/xxx

Где /tmp/xxx содержит пароль для нового пользователя. Но это не работает. Любая идея, как это сделать?

Ответ 1

Вы можете сделать это, используя простой SQL после подключения в качестве суперпользователя (например, postgres) к соответствующей базе данных:

create user user1 password 'foobar'

Если вам нужно сделать это из script, вы можете поместить его в файл sql, а затем передать это в psql:

» sudo -u postgres psql --file=create_user.sql

Ответ 2

Из оболочки вы можете использовать здесь-документ, например:

#!/bin/sh

psql -U postgres postgres <<OMG
 CREATE USER lutser password '`cat /tmp/xxx`' ;
OMG

Кстати: я не думаю, что хранить пароль в /tmp/ не рекомендуется, даже временно.