2015-07-21 35 views
0

我們在日誌中看到一個問題的認可主機不能在Postgres的

FATAL: lock file "/tmp/.s.PGSQL.5432.lock" already exists 
HINT: Is another postmaster (PID 4696) using socket file "/tmp/.s.PGSQL.5432"? 
LOG: could not bind IPv4 socket: Address already in use 

我們已經刪除了/tmp/.s.PGSQL.5432.lock

我們重新啓動Postgres的服務的服務重新啓動

psql -h localhost -d database -U newuser

顯示錯誤的角色 'NEWUSER' 不存在

但如果我們連接沒有主機

psql -d database -U newuser 

它的工作,我們如何使用主機選項?

是否有我們,刪除tmp文件後丟失了一些東西?

+0

好吧,重新啓動機器並嘗試。 –

+0

注意這個用戶的非常類似的帖子http://stackoverflow.com/q/31546303/398670 –

回答

0

和最後一個一樣,你在機器上運行兩個PostgreSQL實例。

您刪除套接字文件而不是關閉實例。這允許你的第二個實例啓動,但它只能在unix套接字上偵聽。假設listen_addresses未設置/爲空,因此它不會嘗試綁定到TCP/IP套接字,因爲如果它嘗試並且端口5432已被使用,它將會失敗。

另一個實例仍在運行並仍在偵聽端口5432以進行TCP/IP連接。當你指定-h localhost時,你得到一個TCP/IP連接而不是默認的unix套接字連接,所以你連接到你的系統上的另一個PostgreSQL實例。

你所有的問題都是由於刪除和查殺東西而不是識別底層問題 - 第二個PostgreSQL實例 - 並解決這個問題而引起的。

+0

我發現 listen_addresses ='127.0.0.200,localhost'#監聽什麼IP地址; – Debadatt

+0

當然,但你有兩個運行PostgreSQL的實例。找出其他實例的啓動情況並將其禁用。如何做到這一點取決於你正在使用的操作系統以及你如何安裝PostgreSQL。例如,如果您在Ubuntu上,請參閱https://help.ubuntu.com/community/PostgreSQL –

+0

是的,我們發現psql(8.4.20,服務器9.4.4),我們的數據在8.4。如何禁用9.4? – Debadatt

相關問題