2012-10-30 108 views
0

我在我的Mac上安裝了Postgres App,並且數據庫正在運行。在Mac上通過網絡訪問postgresql服務器

我能夠通過使用命令psql -h localhost

現在我想從另一臺機器是在同一個網絡上訪問這臺服務器從終端連接。

當我做psql -h <hostname> -U <username>從其他機器,我得到的錯誤

psql: could not connect to server: Connection refused 
    Is the server running on host "my hostname" (xx.xx.xx.xxx) and accepting 
    TCP/IP connections on port 5432? 

在運行我做lsof -i | grep LISTEN服務器的機器,我得到以下結果。

postgres 3196 sudarm 5u IPv6 0x1caf6120  0t0 TCP localhost:5432 (LISTEN) 
postgres 3196 sudarm 6u IPv4 0x14678db0  0t0 TCP localhost:5432 (LISTEN) 
postgres 3196 sudarm 7u IPv6 0x1caf6a80  0t0 TCP localhost:5432 (LISTEN) 

我需要做其他任何事情來從另一臺機器連接到服務器嗎?

回答

8

錯誤消息提出正確的問題:服務器是否接受端口5432上的連接?您提供的lsof輸出表明不,它不是。 PostgreSQL正在偵聽localhost:5432,這意味着它只會接受來自數據庫服務器本身的連接。

打開服務器的postgresql.conf,設置爲listen_addresses = '*',然後重新啓動PostgreSQL。然後它將監聽所有接口上的連接,從而通過網絡接受連接。

從這裏,你可能遇到的下一個問題就是認證。 (PostgreSQL會接受連接,但是你可能並沒有告訴它在網絡中有連接後該怎麼做)。確保服務器的pg_hba.conf有一個與你的數據庫/用戶/源地址組合相匹配的條目 - 類似host all all 10.0.0.0/8 md5可能是合適的 - 並根據需要重新加載PostgreSQL以應用更改。

md5部分告訴PostgreSQL嘗試使用密碼進行身份驗證,因此如果您還沒有設置密碼,您還需要爲有問題的用戶設置密碼。然而,您通常會管理您的數據庫(例如,數據庫服務器上的psql template1),比如ALTER USER whomever WITH PASSWORD 'your_new_password'

+0

還可能有一個系統防火牆來處理。通常需要在每個端口或每個進程上添加例外以允許傳入連接。 –

+0

我正在使用Postgres應用程序。你知道我在哪裏可以找到這些配置文件嗎?另外@CraigRinger我已經禁用了防火牆。 – Sudar

+0

@Sudar'SHOW config_file;'和'SHOW hba_file;'在psql中是運行Pg時最簡單的方法。 –