我试图用一个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 ?
当前回答
如果在一个答案中添加大部分选项还不算太晚的话:
这里有几个选项:
在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美元”
其他回答
在我的.bashrc中添加了pg_env.sh的内容:
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'
这可以通过在(Linux)用户的主目录中创建一个.pgpass文件来实现。 .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 `
我倾向于将URL传递给psql:
psql "postgresql://$DB_USER:$DB_PWD@$DB_SERVER/$DB_NAME"
这使我可以自由地按照自己的意愿命名环境变量,并避免创建不必要的文件。
这需要libpq。文档可以在这里找到。
在Windows上:
将值赋给PGPASSWORD: C:\>set PGPASSWORD=pass 运行命令:C:\>psql -d database -U user
准备好了
或者在一行里,
set PGPASSWORD=pass&& psql -d database -U user
注意&& !
来自官方文件:
有一个~/也很方便。Pgpass文件,以避免定期输入密码。有关更多信息,请参阅第30.13节。
...
该文件应包含以下格式的行:
hostname:port:database:username:password
将使用与当前连接参数匹配的第一行中的password字段。