我试图用一个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
Edit
自从Postgres 9.2以来,还可以指定包含用户名和密码的连接字符串或URI。语法是:
$ psql postgresql://[user[:password]@][host][:port][,...][/dbname][?param1=value1&...]
使用该密码存在安全风险,因为当其他用户查看正在运行的进程的命令行时,密码以纯文本形式可见,例如使用ps (Linux)、ProcessExplorer (Windows)或类似工具时。
另请参阅有关数据库管理员的问题
其他回答
为了让大家更清楚。
您可以将密码分配给PGPASSWORD变量。
下面的代码需要你输入密码:
psql --host=aurora-postgres.cluster-fgshdjdf.eu-west-1.rds.amazonaws.com --port=5432 --user=my_master_user --password --dbname=postgres
我们将——password标志替换为PGPASSWORD=QghyumjB3ZtCQkdf。所以它将是:
PGPASSWORD=QghyumjB3ZtCQkdf psql --host=aurora-postgres.cluster-fgshdjdf.eu-west-1.rds.amazonaws.com --port=5432 --user=my_master_user --dbname=postgres
这样就不需要输入密码了。
我倾向于将URL传递给psql:
psql "postgresql://$DB_USER:$DB_PWD@$DB_SERVER/$DB_NAME"
这使我可以自由地按照自己的意愿命名环境变量,并避免创建不必要的文件。
这需要libpq。文档可以在这里找到。
如果在一个答案中添加大部分选项还不算太晚的话:
这里有几个选项:
在pgpass文件中设置它。链接
设置一个环境变量并从那里获取它: 出口PGPASSWORD = '密码' 然后运行你的PSQL来登录,甚至运行命令 : psql -h clustername -U username -d testdb . xml 在窗口中,你必须使用"set": 设置PGPASSWORD=pass,然后登录psql bash。 通过URL和env变量传递: psql”postgresql: / / $ USER_NAME: PASSWORD@ HOST_NAME美元/ DB_NAME美元”
psql postgresql://myawsumuser:myPassword@127.0.0.1:5432/myawsumdb
在Windows上:
将值赋给PGPASSWORD: C:\>set PGPASSWORD=pass 运行命令:C:\>psql -d database -U user
准备好了
或者在一行里,
set PGPASSWORD=pass&& psql -d database -U user
注意&& !