我试图用一个shell脚本自动化数据库创建过程,其中一件事我遇到了传递密码到psql的障碍。 下面是shell脚本的一段代码:

psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL"

如何以非交互的方式将密码传递给psql ?


当前回答

为了让大家更清楚。

您可以将密码分配给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

这样就不需要输入密码了。

其他回答

一句话: 出口PGPASSWORD =“密码”;psql -h '服务器名' -U '用户名' -d '基地名' -c '命令' 使用命令执行SQL命令,例如“select * from schema.table” 或者更容易读懂: 出口PGPASSWORD = '密码' psql -h '服务器名' -U '用户名' -d '基地名' \ -c 'command'(例如:select * from schema.table)

这可以通过在(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 `        
psql postgresql://myawsumuser:myPassword@127.0.0.1:5432/myawsumdb

如果在一个答案中添加大部分选项还不算太晚的话:

这里有几个选项:

在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美元”

为了让大家更清楚。

您可以将密码分配给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

这样就不需要输入密码了。