我正在尝试使用包含以下命令的脚本备份 Ubuntu 18.04 LTS 上名为 crewdb 的 PostgreSQL 数据库:
pg_dump -h localhost -p 5432 -U postgres -w -C -F p -b -v -f ~/Dropbox\/postgres_backup/crewdb.backup.sql crewdb
我知道上述命令运行的脚本本身是有效的。当我使用 -W 而不是 -w 运行上述命令时,系统会提示我输入密码,备份会顺利进行。我试图在脚本中自动执行此命令,并希望备份继续进行而无需提示输入密码,因此使用 -w 标志。为此,我创建了以下文件
/home/chh1/.pgpass
什么时候ls -la ~/.pgpass
-rw------- 1 chh1 chh1 74 Oct 15 10:00 .pgpass
在 .pgpass 文件中我放置了以下文本:
# Server:Port:Database:Username:Password
*:*:crewdb:postgres:9Gh#$mq
但是,当我运行命令时,出现以下错误输出,并且备份失败:
pg_dump -h localhost -p 5432 -U postgres -w -C -F p -b -v -f ~/Dropbox\/postgres_backup/crewdb.backup.sql crewdb
pg_dump: [archiver (db)] connection to database "crewdb" failed: FATAL:
password authentication failed for user "postgres" password retrieved from
file "/home/chh1/.pgpass" FATAL: password authentication failed for user
"postgres" password retrieved from file "/home/chh1/.pgpass"
我基本上遵循了以下流程:
1)创建.pgpass文件,内容如下
*:*:crewdb:postgres:9Gh#$mq
2)使用命令设置权限
sudo chmod 600 .pgpass
3)将文件所有者设置为您登录时使用的同一用户:
sudo chown chh1:chh1 .pgpass
4)设置PGPASSFILE环境变量:
export PGPASSFILE='/home/chh1/.pgpass'
现在检查
psql -h localhost -U postgres crewdb
我收到类似的错误:
psql: FATAL: password authentication failed for user "postgres"
password retrieved from file "/home/chh1/.pgpass"
FATAL: password authentication failed for user "postgres"
password retrieved from file "/home/chh1/.pgpass"
以下是我的 pg_hba.conf 文件中的设置:
# Database administrative login by Unix domain socket
local all postgres md5
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
如果这里有人能给我指明正确的道路我将非常感激!
答案1
十六进制转储表明,在密码之后和行末之前.pgpass
有一个空格字符( ):20
47 68 23 24 6d 71 20 0a |Gh#$mq .
必须删除该空格,否则它将被视为密码的一部分。