Я пытаюсь автоматизировать процесс создания базы данных с помощью сценария оболочки, и одна вещь, которую я наткнулся на дорожный блок с передачей пароля в PSQL . Вот немного кода из сценария оболочки:
psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL"
Как передать пароль psql
неинтерактивным способом?
bash
postgresql
command-line
Алекс Н.
источник
источник
Ответы:
Из официальной документации :
...
источник
chmod go-rwx .pgpass
Установите переменную окружения PGPASSWORD внутри скрипта перед вызовом psql
Для справки см. Http://www.postgresql.org/docs/current/static/libpq-envars.html.
редактировать
Начиная с Postgres 9.2 также есть возможность указать строку подключения или URI, которые могут содержать имя пользователя и пароль.
Использование этого является угрозой безопасности, поскольку пароль виден в виде простого текста при просмотре командной строки запущенного процесса, например, с помощью
ps
(Linux), ProcessExplorer (Windows) или аналогичных инструментов другими пользователями.Смотрите также этот вопрос на администраторов базы данных
источник
space
в командной строке перед первым символом, и команда не будет сохранена в истории Bash. Работает на Ubuntu / Bash.docker run -e PGPASSWORD="$(pbpaste)" --rm postgres psql -h www.example.com dbname username -c 'SELECT * FROM table;'
в одну строку:
с помощью команды sql, такой как
"select * from schema.table"
или более читаемый:
источник
PGPASSWORD='password' psql ....
также имеет преимущество в том, что переменная недоступна после выполнения команды.export PGPASSWORD=YourNewPassword
работал для меня над другими вариациями.export PGPASSWORD
звучит как очень плохая идеяЯ предпочитаю передавать URL для psql :
Это дает мне свободу именовать переменные среды по своему желанию и позволяет избежать создания ненужных файлов.
Это требует
libpq
. Документацию можно найти здесь .источник
В Windows:
Присвойте значение PGPASSWORD:
C:\>set PGPASSWORD=pass
Команда выполнения:
C:\>psql -d database -U user
готов
Или в одну строку,
Обратите внимание на недостаток места перед &&!
источник
-w
.PGPASSWORD=xxxx psql -U username -d database -w -c "select * from foo;"
работает.Это можно сделать, создав
.pgpass
файл в домашнем каталоге пользователя (Linux)..pgpass
формат файла:Вы также можете использовать подстановочный знак
*
вместо деталей.Скажем, я хотел запустить
tmp.sql
без запроса пароля.С помощью следующего кода вы можете в * .sh файле
источник
Альтернативой использованию
PGPASSWORD
переменной среды является использованиеconninfo
строки в соответствии с документацией :источник
Добавлен контент pg_env.sh в мой .bashrc:
с добавлением (согласно предложению user4653174)
источник