如何在没有密码提示的情况下使用psql?


70

我写了一个脚本来REINDEX索引数据库。这是其中之一:

echo -e "\nreindex for unq_vbvdata_vehicle started at: `date "+%F %T"`" >> ${LOG_FILE}
psql -U ${USERNAME} -h ${HOSTNAME} -d ${DBNAME} -c "REINDEX INDEX scm_main.unq_vbvdata_vehicle;"
if [[ ${?} -eq 0 ]]; then
    echo "reindex for unq_vbvdata_vehicle finished at: `date "+%F %T"`" >> ${LOG_FILE}
else
    echo "reindex for unq_vbvdata_vehicle failed" >> ${LOG_FILE}
    exit 1
fi

问题是我无法在独立模式下运行此脚本。psql每次运行时都会提示输入密码。还有两个限制:

  1. 我无法在没有密码的数据库上创建用户。

  2. 因为REINDEX锁定表,所以我应该sleep <num>在每个表之间使用REINDEX

有没有自动解决方案?

Answers:


110

关于密码提示,您有四个选择:

  1. 设置PGPASSWORD环境变量。有关详细信息,请参见手册:http :
    //www.postgresql.org/docs/current/static/libpq-envars.html
  2. 使用.pgpass文件存储密码。有关详细信息,请参见手册:http :
    //www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. 为该特定用户使用“信任身份验证”:http :
    //www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. 使用包含所有内容的连接URI:http :
    //www.postgresql.org/docs/current/static/libpq-connect.html#AEN42532

4
从PostgreSQL 9.1开始,还有peer用于本地连接的身份验证方法。当前仅适用于Linux,BSD,OS X或Solaris(不适用于Windows)。
Erwin Brandstetter 2012年

1
对A注.pgpass选项,你还是要指定用户名,数据库和主机名的(如果你通常会已经)psql命令
拉斐尔

关于3,您需要编辑方法。其说明在这里:gist.github.com/p1nox/4953113
FuzzyAmi

轻松使用export PGPASSWORD="your_pw"版本1
gies0r

18

一个简单的示例PGPASSWORD如下所示:

PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_HOST -U YOUR_USER_NAME

希望能帮助到你。


4
嗨,Ian_H,谢谢您的评论,我都同意您的观点。接受的答案非常全面,确实解决了我的问题。我之所以回答这个旧帖子,是因为它对我来说仍然不那么直截了当,因为我相信其他人可能会有同样的感觉。
pdm

这绝对是接受的答案的一个很好的补充-有用的提醒是,我们不需要永久设置ENV变量。
凯夫拉尔

1

根据您的帐户权限,未指定数据库的示例可能会失败,因为将根据您连接到的数据库检查用户权限。最好也明确指定数据库。

# this can fail.
PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_HOST -U YOUR_USER_NAME    

# this is more likely to work, assuming given account has permissions to that database.
PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_HOST -U YOUR_USER_NAME -d YOUR_DATABASE  

0

在这个线程中非常有用的答案。我只是为Ubuntu 18.04添加此代码:

sudo PGPASSWORD=yourpasswordHere -u postgres psql

这将带您进入postgres,而无需输入密码提示,而无需设置任何环境变量。这不是永久设置。


不要这样做:密码将在ps -ef的输出中可见。
科林·哈特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.