这很奇怪,但我一直在寻找这种配置来源,但无法找到它。
我目前正在使用opensuse 11.3和postgresql 9。
我发出的每个postgresql命令行都会询问当前用户密码,比如psql,createdb,dropdb,我必须输入当前用户的密码(即postgres)才能使其正常工作。
执行dropdb xxx && createdb xxx
会两次询问密码。
请告诉我光明!
谢谢: - )
其实我已经作为postgres用户(我的linux中的用户)运行,所以我可以在不提供数据库密码的情况下使用psql,但我仍然需要为系统用户postgres提供密码。
因此,如果数据库有dbuser用户,并且运行psql作为postgres(linux用户),则会询问linux用户(postgres)的密码,而不是dbuser密码。
答案 0 :(得分:8)
您可以使用以下格式的行创建~/.pgpass
文件(Windows上为%APPDATA%\postgresql\pgpass.conf
):
hostname:port:database:username:password
有关详细信息,请参阅the documentation。
答案 1 :(得分:3)
如果您使用opensuse,则应该能够通过运行:
来创建.pgpass文件echo "hostname:port:database:username:password" > ~/.pgpass
chmod 0600 ~/.pgpass
当然有了所有正确的信息。
答案 2 :(得分:2)
如果你有一个.pgpass
文件设置允许某个用户访问某个数据库(我们称之为“myprojectdb”),请回想一下creatdb
和dropdb
并不是真的尽管您可能要求他们创建并删除该数据库,但仍然会对“myprojectdb”执行操作。
您很可能希望将postgres的内部表添加到您的pgpass
权限(postgres / templates)。另外,请不要忘记在--no-password
和createdb
上添加dropdb
选项以忽略交互式提示(请注意,只有使用-U
选项指定的用户才能使用此选项修改内部postgres表)