[英]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 ”是一個更好的解決方案
這是修復:
cd /var
sudo rm -r pgsql_socket
sudo ln -s /tmp pgsql_socket
chown _postgres:_postgres pgsql_socket
更多信息可在“ postgresql 9.0.3. on Lion Dev Preview 1 ”中找到。
對於您提到的錯誤,這對我有用。 執行以下操作之一:
如果您在安裝時使用了默認端口5432
以外的其他端口,則可以更改您在postgres.conf
文件中指定的默認端口。
更改postgresql.conf
中的端口號並重新啟動數據庫服務器。
代替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 退出時自動刪除。
如果它不執行以下操作
所以對於這里的很多問題,似乎人們已經在運行 psql 並且不得不刪除postmaster.pid
。 但是,我沒有這個問題,因為我什至從來沒有在我的系統中正確安裝過 postgres。
這是一個在 MAC OSX Yosemite 中對我有用的解決方案
export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
希望這可以幫助! 面條!
此外,這個答案對我幫助最大: 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.app
到psql
的路徑。
每次啟動控制台時都會運行該行(命令)。
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.