Я пытаюсь автоматизировать процесс создания базы данных с помощью оболочки script, и одна вещь, которую я ударил по дорожному блоку с передачей пароля psql. Вот немного кода из оболочки script:
psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL"
Как передать пароль psql неинтерактивным способом?
Спасибо!
Также удобно иметь файл ~/.pgpass, чтобы избежать регулярного ввода паролей. Дополнительную информацию см. В Разделе 30.13.
...
Этот файл должен содержать строки следующего формата:
hostname:port:database:username:password
Будет использовано поле пароля из первой строки, которое соответствует текущим параметрам соединения.
Установите переменную среды PGPASSWORD внутри скрипта перед вызовом psql
PGPASSWORD=pass1234 psql -U MyUsername myDatabaseName
Для справки см. Http://www.postgresql.org/docs/current/static/libpq-envars.html.
редактировать
Поскольку Postgres 9.2 также имеет возможность указать строку соединения или URI, которые могут содержать имя пользователя и пароль.
Использование этого является угрозой безопасности, поскольку пароль отображается в виде простого текста при просмотре командной строки запущенного процесса, например, с помощью ps
(Linux), ProcessExplorer (Windows) или аналогичных инструментов другими пользователями.
См. Также этот вопрос в разделе " Администраторы баз данных"
в одной строке:
export PGPASSWORD='password'; psql -h 'server name' -U 'user name' -d 'base name' -c 'command'
с командой sql, например "select * from schema.table"
или более читаемый:
export PGPASSWORD='password'
psql -h 'server name' -U 'user name' -d 'base name' \
-c 'command' (eg. "select * from schema.table")
PGPASSWORD='password' psql ....
которая также имеет преимущество в том, что переменная недоступна после выполнения команды.
export PGPASSWORD=YourNewPassword
работал для меня над другими вариантами.
Это можно сделать, создав файл .pgpass
в домашнем каталоге пользователя (Linux).
.pgpass
формат файла:
<databaseip>:<port>:<databasename>:<dbusername>:<password>
Вместо деталей вы также можете использовать wild card *
.
Скажем, я хотел запустить tmp.sql
без запроса пароля.
С помощью следующего кода вы можете в *.sh файле
echo "192.168.1.1:*:*:postgres:postgrespwd" > $HOME/.pgpass
echo "` chmod 0600 $HOME/.pgpass `"
echo " ` psql -h 192.168.1.1 -p 5432 -U postgres postgres -f tmp.sql `
В Windows:
Назначить значение PGPASSWORD: C:\>set PGPASSWORD=pass
Команда запуска: C:\>psql -d database -U user
готов
Или в одной строке,
set PGPASSWORD=pass&& psql -d database -U user
Обратите внимание на нехватку места перед &&!
Я предпочитаю передавать URL-адрес в psql:
psql "postgresql://$DB_USER:$DB_PWD@$DB_SERVER/$DB_NAME"
Это дает мне право называть переменные среды, как я желаю, и избегать создания ненужных файлов.
Для этого требуется libpq
. Документацию можно найти здесь
export PGPASSWORD = ${PGPASSWORD-пароль}