2011-09-10 34 views
6

psql mydb产量:postgresql:为什么在运行psql时必须指定-h localhost?

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 

怎么了?

回答

2

可能psql和服务器为unix域套接字使用不同的位置。 (/ var/pgsql_socket /是一个奇怪的位置)如果您正在混合来自不同软件包的二进制文件,则会发生这种情况。 尝试找到插座(/ tmp目录/是一个良好的开端),您可以强制PSQL通过滥用-h选项使用不同的目录:

psql -h /tmp/ 
+0

对于'-h'开关+1,对于本地连接也是如此(在开始处正斜杠)。 Unix域套接字的路径由'postgresql'中的['unix_socket_directory'](http://www.postgresql.org/docs/current/static/runtime-config-connection.html#GUC-UNIX-SOCKET-DIRECTORY)属性确定.conf'。 –

+0

'unix_socket_directory'属性可以是空的(我从来没有见过它设置),在这种情况下,它可能默认为/ tmp /。 – wildplasser

+0

感谢您的提示 - 我正在使用来自postgres的标准OS X软件包,它解释了unix域套接字设置。 – Wells

2

这发生在我身上的OS X,以及问题是/usr/bin/psql是我使用的,但邮政局长从/Library/PostgreSQL/9.0运行。使用/Library/PostgreSQL/9.0/bin/psql(在所有其他情况之前将其写入我的PATH)解决了问题。

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

那CON配置文件将覆盖可在数据库文件夹下的postgresql.conf中找到的几个配置指令。尤其是这两个:

  • unix_socket_group
  • unix_socket_permissions

您可以找到_postgres帐户用于运行服务器,一切都还可以访问如活跃的用户是_postgres组的成员。

通过运行dscl . -read /Groups/_postgres GroupMembership你可以看到,默认情况下该组有以下成员:_devicemgr_calendar_teamsserver_www

我想你有两个选择。将自己添加到_postgres组或更改launchd配置plist文件。后者只是纯文本编辑...但要小心安全性,因为这样你就可以打开Server来满足你改变的标准(见最后一段)。

前者可以通过Server.app或通过dscl命令行实用程序完成。第一个选项可能不需要添加任何内容。只要确保您可以看到系统帐户(查看 - >隐藏/显示系统帐户)。我是那种CLI迷的所以这应该将用户添加到_postgres组:

sudo dscl . -append /Groups/_postgres GroupMembership $USER 

当然是你自己的帐户下运行,那么因为你给访问你的Mac OS X Server数据库,你要小心后端。所以要么保证你的账号安全,要么创建单独的用户来操纵你的数据库,或者不要在那里保存任何私人信息。

8

我有完全相同的事情发生在我身上,大概是由于psql的冲突版本(一个来自Lion,一个来自自制软件)。虽然我仍然无法弄清楚如何让psql使用/ tmp套接字目录,但我确实有一个解决方法。

把你的.bashrc(或.zshrc等)以下:

export PGHOST=/tmp 

这将设置正确的“主机”回到正确的插座目录,而不必提供了-h标志

相关问题