我在我的主目录中创建了一个.pgpass
文件,如下所示
localhost:5432:somedb:someuser:somepass
我正在使用shell脚本创建一个目录并将pg_dump放在somedb
:
mkdir directory
pg_dump somedb > directory/somefile.dump
它仍会提示输入密码。
这里的错误在哪里?
答案 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)
psql
(startup.c)调用PQconnectdbParams
(fe-connect.c),然后调用passwordFromFile
。这是确保使用pgpass文件的清单:
--password
/ -W
和password=
未设置。否则,将不使用pgpass文件。PGPASSWORD
(echo $PGPASSWORD
)。否则,将不使用pgpass文件。$PGPASSFILE
或默认~/.pgpass
或%APPDATA%\postgresql\pgpass.conf
)chmod 600 ~/.pgpass
);否则psql
将显示警告。psql
将显示警告。psql
用户(例如cat ~/.pgpass
)可以读取密码文件;否则psql
将忽略它而不会发出警告。确保它归用户所有,并且其所有祖先目录都可由用户执行。*
。选中的服务器“ pwhost”是host
名称(如果非空)或hostaddr
ip地址。否则,该文件将被忽略而不会发出警告。不幸的是,这些文件中没有日志记录,因此,如果这样做没有帮助,则可能需要自己编译psql
和libpq
并在调试器中运行。