如何调用psql以使它不提示输入密码?
这是我所拥有的:
psql -Umyuser < myscript.sql
但是,我找不到传递密码的参数,所以psql总是提示输入这个参数。
如何调用psql以使它不提示输入密码?
这是我所拥有的:
psql -Umyuser < myscript.sql
但是,我找不到传递密码的参数,所以psql总是提示输入这个参数。
当前回答
这也适用于其他postgresql cliis,例如你可以在非交互模式下运行pgbench。
export PGPASSWORD=yourpassword
/usr/pgsql-9.5/bin/pgbench -h $REMOTE_PG_HOST -p 5432 -U postgres -c 12 -j 4 -t 10000 example > pgbench.out 2>&1 &
其他回答
在Windows上工作的url字符串和使用psql选项的组合:
> psql -d postgresql://username:password@localhost:5432/mydb -f myscript.sql
传递没有-d的命令没有工作,只是连接到数据库,但没有执行脚本
你必须创建一个密码文件:更多信息请参见http://www.postgresql.org/docs/9.0/interactive/libpq-pgpass.html。
在mightybyte为那些不熟悉*nix shell脚本的人提供的答案的基础上,这里有一个工作脚本:
#!/bin/sh
PGPASSFILE=/tmp/pgpasswd$$
touch $PGPASSFILE
chmod 600 $PGPASSFILE
echo "myserver:5432:mydb:jdoe:password" > $PGPASSFILE
export PGPASSFILE
psql mydb
rm $PGPASSFILE
在/tmp/pgpasswd$$的第2行中,双美元符号($$)将进程ID号附加到文件名,这样该脚本可以多次运行,甚至同时运行,而不会产生副作用。
请注意在第4行使用chmod命令——就像mightybyte描述的“不是普通文件”错误一样,如果不这样做,还会出现“权限”错误。
在第7行,如果使用默认值(localhost: 5432)并且只有一个数据库用户,则不必使用-hmyserver、-pmyport或-Ujdoe标志。对于多个用户,(但默认连接)将该行更改为
psql mydb jdoe
不要忘记使脚本可执行
Chmod +x runpsql(或其他脚本文件)
更新:
我采纳了RichVel的建议,在输入密码之前让文件变得不可读。这就弥补了一个小小的安全漏洞。 谢谢!
在命令中使用-w: psql -h localhost -p 5432 -U user -w
你可以在脚本的开头添加这个命令行:
export PGPASSWORD="[your password]"