为什么 pg_dump 忽略 .pgpass?

Why does pg_dump ignore .pgpass?

我创建了一个 .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 文件做了 chmod 0600

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" 并查看 $HOME var 设置的内容(或者它可能已被清除)。您也可以执行 strace pg_dump 并查看触摸了哪些目录——这将生成大量输出,因此您可能很难处理。

最终,您可能需要 1) 与您的系统管理员交谈,看看是否可以修复环境,以便您可以将 .pgpasspg_wrapper 的伪 pg_dump,或 2) 直接使用 pg_dump(通常,它位于 /usr/lib/postgresql/<version_number>/bin/pg_dump,但您可能应该使用 find /usr -name "pg_dump"