我在我的主目录下创建了一个名为.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
将使用与当前连接参数匹配的第一行中的密码字段。
- JHixsonhost:5432:somedb:someuser:somepass
sudo chmod 600 .pgpass
sudo chown 登录用户名:登录用户名 .pgpass
export PGPASSFILE='/home/user/.pgpass'
现在通过连接到数据库检查一下:
psql -h host -U someuser somedb
它不会提示输入密码,而是直接登录到 postgresql。
-U <用户名>
选项,所以它一直在问密码。 - F. Santiago虽然这个问题已经有了答案并被接受,但也可能发生.pgpass文件的权限没有正确设置。它必须禁止世界和组访问:
/bin/chmod 0600 ~/.pgpass
psql
(startup.c)调用PQconnectdbParams
(fe-connect.c),然后调用passwordFromFile
。以下是一个检查清单,以确保可以使用pgpass文件:
--password
/-W
和password=
。否则,pgpass文件将无法使用。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
并在调试器中运行。
localhost:5432:squared_development:squared:squared
更改为 localhost:5432:*:squared:squared
就解决了“不要求密码”的问题。 - Foton检查 .pgpass 文件的所有者。我花了半个小时才发现我使用 sudo 创建了我的 .pgpass 文件。对于我的用户和位置,命令是 chown postgres:postgres /var/lib/pgsql/.pgpass
。
psql
选择了它而不是.pgpass
中的内容。
pg_dump -U someuser -h localhost somedb > directory/somefile.dump
- devnull