我.pgpass
在我的主目录中创建了一个文件,看起来像这样
localhost:5432:somedb:someuser:somepass
我正在使用一个 shell 脚本,它创建一个目录并在somedb
那里放置一个 pg_dump:
mkdir directory
pg_dump somedb > directory/somefile.dump
它仍然提示输入密码。
这里的错误在哪里?
我.pgpass
在我的主目录中创建了一个文件,看起来像这样
localhost:5432:somedb:someuser:somepass
我正在使用一个 shell 脚本,它创建一个目录并在somedb
那里放置一个 pg_dump:
mkdir directory
pg_dump somedb > directory/somefile.dump
它仍然提示输入密码。
这里的错误在哪里?
您是否尝试指定主机、用户和数据库?
pg_dump -U someuser -h localhost somedb > directory/somefile.dump
主机:5432:somedb:someuser:somepass
须藤 chmod 600 .pgpass
sudo chown login_username:login_username .pgpass
导出 PGPASSFILE='/home/user/.pgpass'
现在通过连接到数据库进行检查:
psql -h 主机 -U someuser somedb
它没有提示输入密码,而是登录到 postgresql。
虽然问题已经被回答和接受,但也可能发生 .pgpass 文件的权限设置不正确。它必须禁止世界和组访问:
/bin/chmod 0600 ~/.pgpass
psql
( startup.c ) 调用PQconnectdbParams
( fe-connect.c ),然后passwordFromFile
被调用。这是一个清单,以确保将使用 pgpass 文件:
--password
/-W
和。否则,不会使用 pgpass 文件。password=
PGPASSWORD
未设置环境变量 ( echo $PGPASSWORD
)。否则,不会使用 pgpass 文件。$PGPASSFILE
或默认~/.pgpass
或%APPDATA%\postgresql\pgpass.conf
)chmod 600 ~/.pgpass
);否则psql
将打印警告。psql
将打印警告。psql
(例如cat ~/.pgpass
);否则psql
将忽略它而不发出警告。确保它归用户所有,并且它的所有祖先目录都可由用户执行。hostname:port:database:username:password
(密码文件,passwordFromFile
)。每个字段(密码除外)都可以是*
. 字符:
和\
必须被转义\:
和\\
(即使在密码中)。密码在行尾或行尾结束,可以包含除、或:
之外的任何字节。任何格式不正确或与主机和用户不匹配的行都会被忽略而不会发出警告,就好像它们是注释一样。\r
\n
\0
*
. 检查的服务器的“pwhost”是host
名称(如果非空)或hostaddr
IP 地址。否则,该行将被忽略而不发出警告。不幸的是,这些文件中没有日志记录,所以如果这没有帮助,那么您可能需要自己编译psql
并libpq
在调试器中运行它。
检查 .pgpass 文件的所有者。花了半个小时才发现我已经用 sudo 创建了我的 .pgpass 文件。我的用户和位置的命令是chown postgres:postgres /var/lib/pgsql/.pgpass
.
就我而言,是我已经设置了 PGPASSWORD 环境变量(密码错误),所以psql
选择它而不是里面的内容.pgpass