我正在尝试使用 shell 脚本自动化数据库创建过程,而我在将密码传递给psql时遇到了障碍。下面是来自 shell 脚本的一些代码:
psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL"
如何psql
以非交互方式将密码传递给?
我正在尝试使用 shell 脚本自动化数据库创建过程,而我在将密码传递给psql时遇到了障碍。下面是来自 shell 脚本的一些代码:
psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL"
如何psql
以非交互方式将密码传递给?
在调用 psql 之前在脚本中设置 PGPASSWORD 环境变量
PGPASSWORD=pass1234 psql -U MyUsername myDatabaseName
有关参考,请参阅http://www.postgresql.org/docs/current/static/libpq-envars.html
编辑
从 Postgres 9.2 开始,还可以选择指定可以包含用户名和密码的连接字符串或 URI 。语法是:
$ psql postgresql://[user[:password]@][host][:port][,...][/dbname][?param1=value1&...]
ps
使用它会带来安全风险,因为当其他用户使用 (Linux)、ProcessExplorer (Windows) 或类似工具查看正在运行的进程的命令行时,密码以纯文本形式可见。
另请参阅有关数据库管理员的此问题
在一行中:
export PGPASSWORD='password'; psql -h 'server name' -U 'user name' -d 'base name' -c 'command'
with 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")
在 Windows 上:
为 PGPASSWORD 赋值:C:\>set PGPASSWORD=pass
运行命令:C:\>psql -d database -U user
准备好
或者在一行中,
set PGPASSWORD=pass&& psql -d database -U user
注意 && 之前没有空格!
这可以通过.pgpass
在 (Linux) 用户的主目录中创建一个文件来完成。
.pgpass
文件格式:
<databaseip>:<port>:<databasename>:<dbusername>:<password>
您还可以使用通配符*
代替详细信息。
假设我想在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 `
PGPASSWORD
使用环境变量的另一种方法是conninfo
根据文档使用字符串:
指定连接参数的另一种方法是使用 conninfo 字符串或 URI,而不是数据库名称。这种机制使您可以非常广泛地控制连接。
$ psql "host=<server> port=5432 dbname=<db> user=<user> password=<password>"
postgres=>
如果在一个答案中添加大多数选项还为时不晚:
有几个选项:
设置一个环境变量并从那里获取它:
export PGPASSWORD='password'
然后运行您的 psql 登录,甚至从那里运行命令:
psql -h clustername -U username -d testdb
在 Windows 上,您必须使用 "set" :
set PGPASSWORD=pass
然后登录到 psql bash。
通过 URL 和环境变量传递它:
psql "postgresql://$USER_NAME:$PASSWORD@$HOST_NAME/$DB_NAME"
将 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'