Postgresql

如果我指定主機 localhost,psql 會中斷

  • July 22, 2015

我知道其他地方已經問過這個或類似的問題。 其他答案都沒有對我有用。

機器是 Macbook Pro 2014 / OS X Yosemite 10.10,通過 Homebrew 安裝了 Postgres 9.3.5。

如果我不指定主機,我只能連接到我的本地 postgres 實例。這有效:

psql -Umyuser -d mydb
sql (9.4.4)
Type "help" for help.

myuser=# 

-h localhost才不是:

psql -Umyuser -d mydb -h localhost
psql: server closed the connection unexpectedly
   This probably means the server terminated abnormally
   before or while processing the request.

在我收到這條消息之前,它暫停了很長時間。

我正在嘗試設置一個似乎想要指定 localhost 的第三方工具,因此僅將其關閉不是一個選項。

如果我理解我在其他地方正確閱讀的內容,那麼如果您使用 TCP/IP 並指定-h localhost強制執行,postgres 的行為會有所不同。因此,我在中添加了以下內容pg_hba.conf

local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             localhost               trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

(127.0.0.1 AND localhost 似乎是多餘的,但絕望驅使迷信)……並且在postgresql.conf

listen_addresses = 'localhost'          
port = 5432                             

netstat確認 Postgres 正在監聽該埠:

☁  ~  netstat -an | grep 5432
tcp4       0      0  127.0.0.1.5432         *.*                    LISTEN     
tcp6       0      0  ::1.5432               *.*                    LISTEN     
d8d7c0e31d5add1d stream 0 0 d8d7c0e326b18a1d 0 0 0 /tmp/.s.PGSQL.5432

所有權限都在套接字文件上設置:

~ ls -l /tmp/.s.PGSQL.5432
srwxrwxrwx  1 fritz  wheel  0 12 Jul 13:27 /tmp/.s.PGSQL.5432

/etc/hosts有一個 localhost 條目:

127.0.0.1   localhost
::1         localhost

psqlpg_ctl指向相同的安裝:

~ which psql               
/usr/local/bin/psql
~ ll /usr/local/bin/psql
/usr/local/bin/psql -> ../Cellar/postgresql/9.4.4/bin/psql
~ which pg_ctl
/usr/local/bin/pg_ctl
~  ll /usr/local/bin/pg_ctl
/usr/local/bin/pg_ctl -> ../Cellar/postgresql/9.4.4/bin/pg_ctl

我的系統上其他地方沒有任何名稱psql似乎可以劫持這個過程:

~  sudo find / -name psql
/Applications/pgAdmin3.app/Contents/SharedSupport/psql
/Users/fritz/devtools/phantomjs/src/qt/config.tests/unix/psql
/Users/fritz/Qt/5.3/Src/qtbase/config.tests/unix/psql
/Users/fritz/Qt/5.3/Src/qtbase/src/plugins/sqldrivers/psql
/Users/fritz/Qt/5.3/Src/qtbase/src/sql/drivers/psql
/usr/local/bin/psql
/usr/local/Cellar/postgresql/9.4.4/bin/psql

更新: telnet 連接到 localhost 5432 一段時間,然後斷開連接:

~  telnet localhost 5432
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

更新 2:我使用 wireshark 監視 tcp localhost 埠 5432。麻煩的是,我不知道我應該看到什麼以及結果是否/如何錯誤。希望有人可以製作這個擷取文件

感謝pgsql-general 上關於我使用 netcat 檢查 TCP/IP 的建議,我發現發送到 localhost 的前幾個字節被一個旨在保持 Internet 訪問審計跟踪的程序吞噬了。已解除安裝,一切正常。

引用自:https://dba.stackexchange.com/questions/106701