我已经创建了一个.pgpass文件,它非常适合我的psql命令。

chris@ap2155489:~$ psql --host=my.example.com --port=12345 --username=chris -d example_db
psql (9.6.13)
SSL connection (protocol: TLSv1.2, cipher: xxx, bits: 256, compression: off)
Type "help" for help.

example_db=> \q

当我试图运行pg_dump时,我会被问到密码。
我的.pgpass文件
chris@ap2155489:~$ pg_dump --host=my.example.com --port=12345 --username=chris -d example_db -f dbs/test.sql --clean
Password:

我做错什么了?
两个命令都从主目录运行
更新:
~$ ll /usr/bin/pg_dump
lrwxrwxrwx 1 root root 37 May  9  2019 /usr/bin/pg_dump -> ../share/postgresql-common/pg_wrapper*
~$ ll /usr/bin/psql
lrwxrwxrwx 1 root root 37 May  9  2019 /usr/bin/psql -> ../share/postgresql-common/pg_wrapper*

最佳答案

所以看起来你使用的是一个安装了postgresql-client-common的Ubuntu系统。pg_dumppg_wrapper重载,但是.pgpass应该可以工作(我在我的测试系统上试过了,没问题)。似乎您的系统管理员已经做了一些事情(可能是使用Perl?)它的副作用是使您无法将.pgpasspg_dump一起使用。
一种可能的方法是通过执行perl -e "exec env"并查看$HOMEvar设置为什么(或者它被清除)。您还可以做一个strace pg_dump并查看触摸了哪些目录——这将生成大量输出,因此可能很难使用。
最后,您可能需要1)与系统管理员交谈,看看是否可以修复环境,以便可以将.pgpasspg_wrapper的伪-pg_dump一起使用,或2)直接使用pg_dump(通常,它位于/usr/lib/postgresql/<version_number>/bin/pg_dump中,但您可能应该使用find /usr -name "pg_dump"来定位它)

09-10 19:56