postgresql:.pgpass无法正常工作

时间:2013-05-28 07:18:24

标签: bash postgresql database-backups

我在我的主目录中创建了一个.pgpass文件,如下所示

localhost:5432:somedb:someuser:somepass

我正在使用shell脚本创建一个目录并将pg_dump放在somedb

mkdir directory
pg_dump somedb > directory/somefile.dump

它仍会提示输入密码。

这里的错误在哪里?

5 个答案:

答案 0 :(得分:21)

您是否尝试过指定主机&用户?

pg_dump -U someuser -h localhost somedb > directory/somefile.dump

答案 1 :(得分:17)

虽然问题已经得到解答和接受,但也可能会发生.pgpass文件的权限设置不正确。它必须禁止世界和群组访问:

/bin/chmod 0600 ~/.pgpass

答案 2 :(得分:5)

检查.pgpass文件的所有者。刚刚失去了半个小时才发现我用sudo创建了我的.pgpass文件。我的用户和位置的命令是chown postgres:postgres /var/lib/pgsql/.pgpass

答案 3 :(得分:4)

1)创建包含内容的.pgpass文件

  

主机:5432:somedb:SomeUser是否:somepass

2)使用命令

设置权限
  

sudo chmod 600 .pgpass

3)将文件所有者设置为您登录时使用的用户:

  

sudo chown login_username:login_username .pgpass

4)设置PGPASSFILE环境变量:

  

导出PGPASSFILE =' /home/user/.pgpass'

现在通过连接数据库进行检查:

  

psql -h host -U someuser somedb

它不会提示输入密码并登录到postgresql。

答案 4 :(得分:2)

psqlstartup.c)调用PQconnectdbParamsfe-connect.c),然后调用passwordFromFile。这是确保使用pgpass文件的清单:

  1. 确保connection string中的标记--password / -Wpassword=未设置。否则,将不使用pgpass文件。
  2. 确保未设置环境变量PGPASSWORDecho $PGPASSWORD)。否则,将不使用pgpass文件。
  3. 确保pgpass file在正确的位置($PGPASSFILE或默认~/.pgpass%APPDATA%\postgresql\pgpass.conf
  4. 确保密码文件不能按组或其他方式读取,写入或执行(例如chmod 600 ~/.pgpass);否则psql将显示警告。
  5. 确保密码文件是文件(不是符号链接);否则psql将显示警告。
  6. 确保psql用户(例如cat ~/.pgpass)可以读取密码文件;否则psql将忽略它而不会发出警告。确保它归用户所有,并且其所有祖先目录都可由用户执行。
  7. 确保pgpass文件中该行的主机名,端口,dbname,用户名与服务器匹配或为*。选中的服务器“ pwhost”是host名称(如果非空)或hostaddr ip地址。否则,该文件将被忽略而不会发出警告。

不幸的是,这些文件中没有日志记录,因此,如果这样做没有帮助,则可能需要自己编译psqllibpq并在调试器中运行。