我是使用postgres的新手,我正在尝试访问在我没有超级用户权限的网络服务器上运行的数据库。
我的问题是,在尝试与数据库交互或访问时,我总是被要求输入密码,尽管所有用户和数据库的身份验证都设置为trust
。
在我的主目录中从源安装postgres 9.2后,我使用initdb -U thisuser -D tmpdb -A trust
成功地将数据库群集联系起来,其中thisuser
是我在网络服务器上的用户名。在此期间,我通过ssh登录到服务器。
使用pg_ctl -D tmpdb start
启动服务器也没问题。
但是,当我尝试使用psql -U postgres
访问数据库时,它总是要求输入密码。
据我所知,这不应该发生,因为我允许来自所有用户和数据库的连接。配置文件位于数据库集群floder中:tmpdb/pg_hba.conf
和tmpdb/postgresql.conf
。
服务器设置为listen_addresses = 'localhost'
,身份验证设置如下:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
我经常使用这些设置,但是在设置数据库后我无法确定如何实际访问数据库。我怎样才能获得成功?
提前感谢!
编辑已解决:
我不确定之前究竟发生了什么,但我必须按如下方式设置环境变量:
PGPORT = 5433
export PGPORT
其中5433是postgresql.conf
文件中指定的端口。现在它工作正常......(谢谢@celenius)。
答案 0 :(得分:1)
如果initdb
已调用-U thisuser
,则thisuser
将被用作超级用户而不是postgres
。
实际上,在这种情况下,postgres
甚至可能不存在作为数据库用户,这也是psql -U postgres
不起作用的一个很好的理由。至于为什么它要求输入密码而不是泄露用户不存在,这是一种常见的响应,可以避免将现有帐户的信息泄露给未经授权的人。
除此之外,pg_hba.conf
和其他命令看起来很好。您应该可以使用psql -U thisuser
连接无密码。