簡體   English   中英

PostgreSQL 錯誤“無法連接到服務器:沒有這樣的文件或目錄”

[英]PostgreSQL error 'Could not connect to server: No such file or directory'

像其他一些人一樣,當我在我的項目中運行 rake db:migrate 或什至為我的Ruby on Rails 3.2 應用程序嘗試大多數數據庫任務時,我遇到了這個錯誤。

PGError(無法連接到服務器:沒有這樣的文件或目錄。服務器是否在本地運行並接受 Unix 域套接字“/tmp/.s.PGSQL.5432”上的連接?

很久以前我用Homebrew安裝了PostgreSQL ,最近嘗試安裝MongoDB之后,我的 PostgreSQL 安裝從未如此。 我正在運行 OS X v10.6 Snow Leopard。

出了什么問題,我如何更好地了解 PostgreSQL 是如何以及應該在我的 Mac 上設置的?

到目前為止(我認為)這告訴我 PostgreSQL 沒有運行(?)。

ps -aef|grep postgres                                                                                                   (ruby-1.9.2-p320@jct-ana) (develop) ✗
  501 17604 11329   0   0:00.00 ttys001    0:00.00 grep postgres

但這是否告訴我 PostgreSQL 正在運行?

✪ launchctl load -w /usr/local/Cellar/postgresql/9.1.4/homebrew.mxcl.postgresql.plist                                                        (ruby-1.9.2-p136) 
homebrew.mxcl.postgresql: Already loaded

我該如何解決? 我沒看到什么?

PS: ~/Library/LaunchAgents包含兩個 PostgreSQL .plist 文件。 我不確定這是否相關。

org.postgresql.postgres.plist
homebrew.mxcl.postgresql.plist

我嘗試了以下並得到如下結果。

$ psql -p 5432 -h 本地主機

psql: could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (fe80::1) and accepting
    TCP/IP connections on port 5432?

因為 OS X 安裝了它自己的 PostgreSQL 版本,而 Homebrew 在不同的地方安裝了不同的版本,並且 PostgreSQL 命令在 /tmp/ 目錄中查找,所以我已經閱讀過。 您需要在 Stack Overflow 上進行更多搜索,但基本上您對 PostgreSQL 進行符號鏈接,以便在該 tmp 路徑中查找的任何內容實際上都能找到真正的路徑,如果這有意義的話。

這是我發現更多嘗試的鏈接,特別是按照上面的符號鏈接, Mac OSX Lion Postgres 不接受 /tmp/.s.PGSQL.5432 上的連接 我仍然希望有人能對在 OS X 上安裝 PostgreSQL 背后的概念以及為什么這一切如此困難做出一個體面的解釋。

幫助排除故障的最新見解:

$ which psql // This tells you which PostgreSQL you are using when you run $ psql. 

然后運行:

$ echo $PATH

要考慮的關鍵是:

確保要運行的 PostgreSQL 副本的路徑條目位於 OS X 系統的 PostgreSQL 路徑之前。

這是一個核心要求,它決定了運行哪個 PostgreSQL,據我所知,這會導致大多數這些問題。

檢查您的 postgres 目錄中是否沒有 postmaster.pid,可能是/usr/local/var/postgres/

刪除它並啟動服務器。

檢查 - https://github.com/mperham/lunchy是一個很好的 launchctl 包裝器。

對我來說,這行得通

rm /usr/local/var/postgres/postmaster.pid

如果您在 OS X 上,“ Postgres.app ”是一個更好的解決方案


這是修復:

  1. 停止數據庫
  2. cd /var
  3. sudo rm -r pgsql_socket
  4. sudo ln -s /tmp pgsql_socket
  5. chown _postgres:_postgres pgsql_socket
  6. 重啟 PostgreSQL(不是你的電腦)

更多信息可在“ postgresql 9.0.3. on Lion Dev Preview 1 ”中找到。

對於您提到的錯誤,這對我有用。 執行以下操作之一

  1. 如果您在安裝時使用了默認端口5432以外的其他端口,則可以更改您在postgres.conf文件中指定的默認端口。

  2. 更改postgresql.conf中的端口號並重新啟動數據庫服務器。

  3. 代替psql輸入完整的命令:

     psql -p 5432 -h localhost
    • 服務器名稱和端口號

如果您正在運行 Homebrew,請卸載 Postgresql end pg gem:*

$ gem uninstall pg
$ brew uninstall postgresql

下載並運行以下腳本以修復 /usr/local 上的權限:* https://gist.github.com/rpavlik/768518

$ ruby fix_homebrew.rb

然后再次安裝 Postgres 和 pg gem:*

$ brew install postgresql  
$ initdb /usr/local/var/postgres -E utf8

要在登錄時啟動 postgresql,請運行:

$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents 

或者手動啟動。

安裝 pg gem

$ gem install pg

我希望有幫助

我通過升級 postgres 解決了這個問題。

brew update
brew upgrade

然后我還必須升級數據庫以兼容新的主要版本,因為我從 10 升級到了 11。

brew postgresql-upgrade-database

(來源https://github.com/facebook/react-native/issues/18760#issuecomment-410533581

當我將 Postgres 升級到 9.3.x 時,我遇到了這個問題。 對我來說,快速解決方法是降級到我之前擁有的任何 9.2.x 版本(無需安裝新版本)。

$ ls /usr/local/Cellar/postgresql/
9.2.4
9.3.2
$ brew switch postgresql 9.2.4
$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
<open a new Terminal tab or window to reload>
$ psql

Homebrew install specific version of formula? ” 提供了更全面的解釋以及解決問題的替代方法。

我在使用自制軟件在 Mac 10.15.5 上運行時遇到了這個錯誤,這似乎是一個更新的解決方案,適用於上述解決方案。

有一個名為 postmaster.pid 的文件應該在 postresql 退出時自動刪除。

如果它不執行以下操作

  • brew services stop postgresql <--- 在 rm 之前無法退出可能會損壞數據庫
  • sudo rm /usr/local/var/postgres/postmaster.pid

所以對於這里的很多問題,似乎人們已經在運行 psql 並且不得不刪除postmaster.pid 但是,我沒有這個問題,因為我什至從來沒有在我的系統中正確安裝過 postgres。

這是一個在 MAC OSX Yosemite 中對我有用的解決方案

  1. 我去了http://postgresapp.com/並下載了該應用程序。
  2. 我將應用程序移至 Application/ 目錄
  3. 我通過將其添加到 .bashrc 或 .bash_profile 或 .zshrc 將其添加到 $PATH : export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
  4. 我從 Applications 目錄運行 postgres 並再次運行命令並且它工作。

希望這可以幫助! 面條!

此外,這個答案對我幫助最大: https ://stackoverflow.com/a/21503349/3173748

當您運行: psql -p 5432 -h localhost 它不使用環回驅動程序,而是使用真正的套接字,因此您需要配置 postgres 以接受套接字連接。 因此,即使 pgadmin 和其他客戶端可以工作,psql 也不會。

您需要同時更改 postgresql.conf 文件和 pg_hba.conf 文件,以便允許通過真實套接字進行連接。 這也將允許從遠程 IP 連接,這就是默認禁用它的原因。

這些文件位於數據目錄中,但實際位置可能會有所不同,具體取決於 postgres 的安裝方式。 運行 postgres 后,運行以下命令:

ps -ef | grep postmaster

這兩個文件是-D目錄(可能是/usr/local/pgsql/data)。

對於 postgresql.conf 文件,取消注釋 listen_address 並將其更改為:

listen_address = '*'

對於 pg_hba.conf 添加以下行:

host all all 0.0.0.0/0 md5

我不太了解 Mac 或 Homebrew,但我非常了解 PostgreSQL。

您想弄清楚試圖啟動 PostgreSQL 的日志在哪里,以及 PostgreSQL 的套接字目錄是什么。 默認情況下,當你構建 PG 時,socket 目錄是 /tmp/。 如果您在構建 PG 並啟動 PG 時沒有更改它,那么您應該能夠在 /tmp 中看到一個套接字文件:ls -al /tmp

套接字文件以“.”開頭,因此您不會看到它帶有 ls 的“-a”。

如果您在那里看不到套接字,並且您在 ps awux | 中看不到任何東西 grep postgres,然后 PG 可能沒有運行,或者它可能是並且它是 OSX 安裝的。 可能發生的情況是,您可能在 localhost 上偵聽端口 5432 時遇到沖突 - 使用 netstat -anp 查看在 5432 上偵聽的內容(如果有的話)。如果 Mac OSX PG 已經在偵聽該端口,則可能成為問題。

希望有幫助。 我聽說自制軟件會讓事情變得有點難看,我交談過的很多人都鼓勵使用虛擬機。

對我來說,命令rm /usr/local/var/postgres/postmaster.pid不起作用,因為我用自制軟件安裝了特定版本的 postgresql。

正確的命令是rm /usr/local/var/postgres@10/postmaster.pid

然后brew services restart postgresql@10

原因

Lion 已經安裝了一個 postgres 版本,並默認使用這些二進制文件。 通常,您可以通過使用自制 postgres 二進制文件的完整路徑來解決此問題,但其他程序可能仍然存在問題。

解決方案

卷曲http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh |

通過

http://nextmarvel.net/blog/2011/09/brew-install-postgresql-on-os-x-lion/

您收到此錯誤的一個原因是您的本地 postgres 數據庫在您重新啟動計算機時關閉。 在新的終端窗口中,只需鍵入:

$psql -h localhost 

重新啟動服務器。

你好世界 :)
對我來說最好但奇怪的方法是做接下來的事情。

1)下載postgres93.app或其他版本。 將此應用程序添加到 /Applications/ 文件夾中。

2)在文件.bash_profile (在我的主目錄中)中添加一行(命令):

export PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATH
這是從Postgres93.apppsql的路徑。 每次啟動控制台時都會運行該行(命令)。

3)/Applications/文件夾啟動Postgres93.app 它啟動一個本地服務器(端口是“5432”,主機是“localhost”)。

4)在所有這些操作之后,我很高興運行$ createuser -SRDP user_name和其他命令並看到它有效! 每次系統啟動時都可以運行Postgres93.app

5)此外,如果您想以圖形方式查看數據庫,您應該安裝PG Commander.app 將您的 postgres 數據庫視為漂亮的數據表的好方法

當然,它只對本地服務器有用。 如果此說明對遇到此問題的其他人有所幫助,我將很高興。

我有 PostgreSQL 9.3 並得到了同樣的錯誤,

無法連接到服務器:連接被拒絕 服務器是否在主機“localhost”(127.0.0.1) 上運行並接受端口 5432 上的 TCP/IP 連接?

我使用以下方法解決了這個問題:

chmod 777  /var/lib/pgsql/9.3/data/pg_hba.conf 
service postgresql-9.3 restart

這個對我有用。

對於它的價值,當我的pg_hba.conf文件( /etc/postgresql/9.5/main/pg_hba.conf )中有錯字( md4而不是md5 )時,我遇到了同樣的錯誤

如果您像我一樣來到這里,請仔細檢查該文件一次,以確保其中沒有任何可笑的東西。

只要通過運行brew services restart postgresql出現錯誤就重新啟動 Postgres,然后再試一次

在本地運行 PostgreSQL 可能會有不同的問題。 我建議清理所有已安裝的 postgres 版本並重新開始。 安裝后,如果您的 rails 項目使用最新的db/schema.rb ,那么重新創建數據庫非常容易

這是我通常在 Mac 上安裝 PostgreSQL 的方法。 如果您在本地 root 用戶下運行數據庫,您可能希望省略創建todo用戶的最后一步

原因之一可能是

postgresql.conf 文件中的 unix_socket_directories 未與它要查找的目錄一起列出。

在問題示例中,它正在尋找目錄 /tmp 這必須在 postgresql.conf 文件中提供

像這樣的東西:

unix_socket_directories = '/var/run/postgresql,/tmp'    # comma-separated list of directories

這個解決方案對我有用。

如果您使用的是 MacOS 並使用自制軟件,我發現這個答案非常有幫助:

https://stackoverflow.com/a/27708774/4062901

對我來說,我的服務器正在運行,但由於升級,我遇到了連接問題(注意:我使用 brew 服務)。 如果 Postgres 正在運行,請嘗試cat /usr/local/var/postgres/server.log並查看日志內容。 我的錯誤是遷移,而不是連接問題。

同樣在他們提出的手動遷移之后(確實有效,但是)我發現我的用戶不再有一個表。 試試這個命令來解決這個問題: createdb (通過psql 回答: FATAL: database "<user>" does not exist

來自不同stackoverflow問題的以下解決方案幫助了我:

找到 postgres 數據目錄。 在使用自制軟件的 MAC 上,它是/usr/local/var/postgres/ ,其他系統可能是/usr/var/postgres/

通過運行刪除 pid 文件:

rm postmaster.pid

重新啟動postgress。 在 Mac 上,運行:

brew services restart postgresql

這很簡單。 僅在您的 database.yaml 文件中添加主機。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM