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