Как указать пароль для psql неинтерактивно?
Я пытаюсь автоматизировать процесс создания базы данных с помощью оболочки script, и одна вещь, которую я ударил по дорожному блоку с передачей пароля psql.
Вот немного кода из оболочки script:
psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL"
Как передать пароль psql неинтерактивным способом?
Спасибо!
Ответы
Ответ 1
Из официальной документации:
Также удобно иметь файл ~/.pgpass, чтобы избежать регулярного ввода паролей. Дополнительную информацию см. В Разделе 30.13.
...
Этот файл должен содержать строки следующего формата:
hostname:port:database:username:password
Будет использовано поле пароля из первой строки, которое соответствует текущим параметрам соединения.
Ответ 2
Установите переменную среды 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) или аналогичных инструментов другими пользователями.
См. Также этот вопрос в разделе " Администраторы баз данных"
Ответ 3
-
в одной строке:
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")
Ответ 4
Я предпочитаю передавать URL-адрес в psql:
psql "postgresql://$DB_USER:[email protected]$DB_SERVER/$DB_NAME"
Это дает мне право называть переменные среды, как я желаю, и избегать создания ненужных файлов.
Для этого требуется libpq
. Документацию можно найти здесь
Ответ 5
Это можно сделать, создав файл .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 `
Ответ 6
В Windows:
-
Назначить значение PGPASSWORD: C:\>set PGPASSWORD=pass
-
Команда запуска: C:\>psql -d database -U user
готов
Или в одной строке,
set PGPASSWORD=pass&& psql -d database -U user
Обратите внимание на нехватку места перед &&!
Ответ 7
export PGPASSWORD = ${PGPASSWORD-пароль}
Ответ 8
Добавил содержимое файла pg_env.sh в мой .bashrc:
cat /opt/PostgreSQL/10/pg_env.sh
#!/bin/sh
# The script sets environment variables helpful for PostgreSQL
export PATH=/opt/PostgreSQL/10/bin:$PATH
export PGDATA=/opt/PostgreSQL/10/data
export PGDATABASE=postgres
export PGUSER=postgres
export PGPORT=5433
export PGLOCALEDIR=/opt/PostgreSQL/10/share/locale
export MANPATH=$MANPATH:/opt/PostgreSQL/10/share/man
с добавлением (согласно предложению user4653174)
export PGPASSWORD='password'