如何非交互式地指定psql的密码?
我正在尝试使用shell脚本自动化数据库创build过程,还有一件事是通过将密码传递给psql来实现的。 以下是shell脚本的一些代码:
psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL"
如何以非交互方式将密码传递给psql?
谢谢!
从官方文档 :
有一个〜/ .pgpass文件以避免经常input密码也很方便。 有关更多信息,请参见第30.13节 。
在调用psql之前,在脚本中设置PGPASSWORD环境variables
PGPASSWORD=pass1234 psql -U MyUsername myUserName
有关参考,请参阅http://www.postgresql.org/docs/current/static/libpq-envars.html
编辑
自Postgres 9.2以来,也可以select指定一个包含用户名和密码的连接URL 。
使用这种方式存在安全风险,因为如果使用ps
(Linux),ProcessExplorer(Windows)或类似工具查看正在运行的进程的命令行,密码可以用纯文本显示。
另请参阅数据库pipe理员的这个问题
-
在一行中:
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")
这可以通过在(Linux)用户的主目录中创build一个.pgpass
文件来完成。 .pgpass
文件格式:
<databaseip>:<port>:<databasename>:<dbusername>:<password>
你也可以使用通配符*
代替细节。
假设我想运行tmp.sql
而不提示input密码。
用下面的代码你可以在* .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:\ Windows \ system32> set PGPASSWORD = clave
- 运行命令
C:\ Windows \ system32> psql -d basededatos -U usuario
准备