作者:瀚高PG实验室 (Highgo PG Lab)- 海无涯
我们知道pg_dump -W是强制pg_dump执行的时候连接到一个数据库之前强制提示密码输入。
-w则是从不提示密码,但是如果服务器请求密码验证身份认证,而又不能通过其他方式(例如.pgpass文件)来获得,则 此命令会导致连接失败。这个选项也长长用在后台脚本中,因为后台脚本无法输入密码。
[highgo@hgtest ~]$ pg_dump -h localhost -p 5866 -U highgo -b -v -w -f highgo highgo.bak
pg_dump: [archiver (db)] connection to database "highgo.bak" failed: fe_sendauth: no password supplied
实际上 -h localhost 是通过pg_hba.conf:
# IPv4 local connections:
host all all 0.0.0.0/0 md5
来连接数据库的,是需要强制输入密码的
如果换成本地登录呢?
[highgo@hgtest ~]$ pg_dump -p 5866 -U highgo -b -v -f highgo
pg_dump: last built-in OID is 16383
pg_dump: reading extensions
......
[highgo@hgtest ~]$ ll
total 32556
-rw-rw-r-- 1 highgo highgo 33335844 Jun 22 19:00 highgo
即便是不指定-w也不用输入密码
配置.pgpass试一试:
hostname:port:database:username:password
[highgo@hgtest ~]$ cat .pgpass
localhost:5866:highgo:highgo:highgo123
[highgo@hgtest ~]$ chmod 0600 .pgpass
pg_dump -h localhost highgo -p 5866 -U highgo -b -v -f highgo.bak3
-rw-rw-r-- 1 highgo highgo 33335844 Jun 22 19:25 highgo.bak3