我试图用一个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 ?
当前回答
在Windows上:
将值赋给PGPASSWORD: C:\>set PGPASSWORD=pass 运行命令:C:\>psql -d database -U user
准备好了
或者在一行里,
set PGPASSWORD=pass&& psql -d database -U user
注意&& !
其他回答
为了让大家更清楚。
您可以将密码分配给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
这样就不需要输入密码了。
在我的.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'
使用PGPASSWORD环境变量的另一种方法是根据文档使用conninfo字符串:
指定连接参数的另一种方法是在conninfo中 字符串或URI,用来代替数据库名称。这 机制使您可以对连接进行非常广泛的控制。
$ psql "host=<server> port=5432 dbname=<db> user=<user> password=<password>"
postgres=>
来自官方文件:
有一个~/也很方便。Pgpass文件,以避免定期输入密码。有关更多信息,请参阅第30.13节。
...
该文件应包含以下格式的行:
hostname:port:database:username:password
将使用与当前连接参数匹配的第一行中的password字段。
在Windows上:
将值赋给PGPASSWORD: C:\>set PGPASSWORD=pass 运行命令:C:\>psql -d database -U user
准备好了
或者在一行里,
set PGPASSWORD=pass&& psql -d database -U user
注意&& !