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

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

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


当前回答

在我的.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'

其他回答

在我的.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 =“密码”;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

为了让大家更清楚。

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

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

在调用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)或类似工具时。

另请参阅有关数据库管理员的问题