2011-09-10 35 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標誌

相關問題