psql mydb
收益:
psql: could not connect to server: Permission denied
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?
psql -h localhost mydb
效果很好。 pg_hba.conf
看起来像:
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
怎么了?
答案 0 :(得分:8)
我有完全相同的事情发生在我身上,可能是由于psql的冲突版本(一个来自Lion,一个来自自制软件)。虽然我仍然无法弄清楚如何让psql使用/ tmp套接字目录,但我确实有一个解决方法。
将以下内容放在.bashrc(或.zshrc等)中:
export PGHOST=/tmp
这会将正确的“主机”设置回正确的套接字目录,而不必提供-h标志
答案 1 :(得分:3)
可能psql和服务器对unix-domain套接字使用不同的位置。 (/ var / pgsql_socket /是一个奇怪的位置)如果你混合来自不同包的二进制文件,可能会发生这种情况。 尝试找到套接字(/ tmp /是一个好的起点)你可以通过滥用-h选项强制psql使用不同的目录:
psql -h /tmp/
答案 2 :(得分:2)
似乎是reported defect。
答案 3 :(得分:2)
在OS X上发生了这种情况,问题在于/usr/bin/psql
是我正在使用的,但postmaster是从/Library/PostgreSQL/9.0
运行的。使用/Library/PostgreSQL/9.0/bin/psql
(在其他所有内容之前将其放入我的PATH
)修复了问题。
答案 4 :(得分:1)
由于其他答案解决了其他选择,我想我可以在Lion上提供有关 Mac OS X Server 的内容。我遇到了非常类似的问题 - 在我的情况下,甚至-h localhost
都没有工作,因为在PostregSQL中禁用了网络,这在很多情况下是非常好的主意。 Mac OS X Server的用途是通过launchd
启动PostgreSQL服务器。
随处可见的一些提示:
serveradmin
服务:postgres
launchd
配置文件:/System/Library/LaunchDaemons/org.postgresql.postgres.plist
/var/pgsql
/var/pgsql_socket
该配置文件会覆盖可在数据库文件夹下的postgresql.conf
中找到的多个配置指令。特别是这两个:
unix_socket_group
unix_socket_permissions
您可以发现_postgres
帐户用于运行服务器,如果活跃用户是_postgres
组的成员,也可以访问所有内容。
通过运行dscl . -read /Groups/_postgres GroupMembership
,您可以看到默认情况下该群组包含以下成员:_devicemgr
_calendar
_teamsserver
_www
我猜你有两个选择。将您自己添加到_postgres组或更改launchd
配置plist文件。后者只是纯文本编辑......但要注意安全性,因为这样你就可以将服务器打开到满足你改变标准的任何内容(参见最后一段)。
前者可以通过Server.app
或dscl
命令行实用程序完成。第一个选项可能不需要添加任何内容。只需确保您可以看到系统帐户(查看 - >隐藏/显示系统帐户)。我是一个CLI迷,所以这应该将你的用户添加到_postgres
组:
sudo dscl . -append /Groups/_postgres GroupMembership $USER
当然,您应该小心在帐户下运行的内容,因为您可以访问Mac OS X Server数据库后端。因此,要么保护您_postgres
帐户,要么创建单独的用户来操纵您的数据库,或者不保存任何私有数据。