我试图用一个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 ?
当前回答
我倾向于将URL传递给psql:
psql "postgresql://$DB_USER:$DB_PWD@$DB_SERVER/$DB_NAME"
这使我可以自由地按照自己的意愿命名环境变量,并避免创建不必要的文件。
这需要libpq。文档可以在这里找到。
其他回答
来自官方文件:
有一个~/也很方便。Pgpass文件,以避免定期输入密码。有关更多信息,请参阅第30.13节。
...
该文件应包含以下格式的行:
hostname:port:database:username:password
将使用与当前连接参数匹配的第一行中的password字段。
为了让大家更清楚。
您可以将密码分配给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)
psql postgresql://myawsumuser:myPassword@127.0.0.1:5432/myawsumdb
我倾向于将URL传递给psql:
psql "postgresql://$DB_USER:$DB_PWD@$DB_SERVER/$DB_NAME"
这使我可以自由地按照自己的意愿命名环境变量,并避免创建不必要的文件。
这需要libpq。文档可以在这里找到。