Answers:
从官方文档中:
拥有〜/ .pgpass文件也很方便,可以避免定期输入密码。有关更多信息,请参见第30.13节。
...
该文件应包含以下格式的行:
hostname:port:database:username:password
将使用第一行中与当前连接参数匹配的密码字段。
chmod go-rwx .pgpass
在调用psql之前,在脚本内设置PGPASSWORD环境变量
PGPASSWORD=pass1234 psql -U MyUsername myDatabaseName
有关参考,请参见http://www.postgresql.org/docs/current/static/libpq-envars.html
编辑
从Postgres 9.2开始,还可以选择指定可以包含用户名和密码的连接字符串或URI。
使用该方法存在安全风险,因为当其他用户查看正在运行的进程的命令行(例如,使用ps
(Linux),ProcessExplorer(Windows)或类似工具)时,密码以纯文本形式可见。
另请参阅有关数据库管理员的问题
space
在命令行中的第一个字符前添加a ,该命令将不会存储在bash历史记录中。适用于ubuntu / bash。
docker run -e PGPASSWORD="$(pbpaste)" --rm postgres psql -h www.example.com dbname username -c 'SELECT * FROM table;'
一行:
export PGPASSWORD='password'; psql -h 'server name' -U 'user name' -d 'base name' -c 'command'
使用命令 sql命令,例如"select * from schema.table"
或更可读:
export PGPASSWORD='password'
psql -h 'server name' -U 'user name' -d 'base name' \
-c 'command' (eg. "select * from schema.table")
PGPASSWORD='password' psql ....
这还具有以下优点:在完成命令后无法访问变量。
export PGPASSWORD=YourNewPassword
在其他版本上为我工作。
export PGPASSWORD
听起来像是一个非常糟糕的主意
我倾向于将URL传递给psql:
psql "postgresql://$DB_USER:$DB_PWD@$DB_SERVER/$DB_NAME"
这使我可以随意命名环境变量,并避免创建不必要的文件。
这需要libpq
。该文档可在此处找到。
这可以通过.pgpass
在(Linux)用户的主目录中创建一个文件来完成。
.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 `
在我的.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'