PostgreSQL错误“无法连接到服务器:没有这样的文件或目录”


136

像其他人一样,当我在项目中运行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

要考虑的关键是:

在OS X系统的PostgreSQL路径之前,请确保要运行COM的PostgreSQL副本的路径条目。

这是决定运行哪个PostgreSQL的核心要求,而我被告知会导致大多数这些问题。


您是否找到了解决方案?我看到您还没有标记一个。这些都不对我有帮助。
2013年

它仍然主要是伏都教和奇怪的化身。我刚刚在上面的[Edit 2]中添加了一个链接,其中包含一些更多建议以及如何根据我的编辑注释进行符号链接。最后,Symlink为我工作了,但我想我也在那里卸载并重新安装了postgres和homebrew,因此很难确切知道是什么造成了影响。祝好运。如果发现新发现,请立即举报,对此问题有15,000的意见,这使很多人感到痛苦!
2013年

@AndrasGyomrey我刚刚从澳大利亚的RailsCamp15回来,人们说关键是要正确设置路径文件,我已经在上面的Edit 3中进行了解释。
2014年

请记住,launchctl报告某些内容已加载并不一定意味着它已启动并正在运行。您应该看看bigsql.com作为替代方案。在Mac上可以使用,并具有良好的管理UI。
Jim Nasby '16

Answers:


102

检查您的postgres目录中是否没有postmaster.pid /usr/local/var/postgres/

删除它并启动服务器。

检查-https : //github.com/mperham/lunchy是launchctl的绝佳包装。


3
这对我有用。我只是重新安装了优胜美地,然后从自制软件中加载了postgres。第一次使用它时效果很好,但重新启动后出现此问题。那么,您能解释一下为什么行得通吗?
丹·威廉姆斯

2
为我工作,但对于新手来说,有人可以解释这的原因和安全性吗?
亚历山大·米尔斯

58

如果您使用的是OS X,则“ Postgres.app ”是更好的解决方案


解决方法是:

  1. 停止数据库
  2. cd /var
  3. rm -r pgsql_socket
  4. ln -s /tmp pgsql_socket
  5. chown _postgres:_postgres pgsql_socket
  6. 重新启动PostgreSQL(不是您的计算机)

有关更多信息,请参见“ Lion Dev Preview 1上的postgresql 9.0.3。 ”。


2
错误返回给我,此修复无济于事。我感觉我在一个黑暗的房间里碰碰运气,以了解实际发生的情况以及自己应用修复程序的过程。您能否解释我如何诊断和解决此问题?
演变

为我工作。/tmp对_postgres 感到奇怪,但嘿:)
wrdevos

postgresapp有效,但是为什么我不能在终端中启动服务器?我退出此应用程序后,问题又按预期返回。
hakunami

这对我有用,但是请注意,您必须是root或使用sudo才能执行#2-4。此外,请阐明步骤#5-您只需要重新启动postgres,而不是计算机即可。
mpelzsherman 2014年

2
大写字母没有一个更好的答案。它仍然是完全正常的安装,并通过自制运行的Postgres(服务)
Drenmi

55

对我来说,这有效

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

9
以我pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
为例

4
我还必须重新启动postgres,通过homebrew安装后,您可以这样操作:brew services restart postgresql
santuxus

2
我的情况是在No such file or directory
docker

2
rm:/usr/local/var/postgres/postmaster.pid:没有这样的文件或目录
nourza

13

这为我解决了您提到的错误。执行以下操作之一

  1. postgres.conf如果在安装过程中使用了默认端口以外的其他内容,则可以更改文件中指定的默认端口 5432

  2. 更改端口号,postgresql.conf然后重新启动数据库服务器。

  3. 而不是psql键入完整的命令:

    psql -p 5432 -h localhost   
    • 服务器名称和端口号

1.我认为我的安装将按照默认设置进行。
演变

2.我可以更改此设置,更改端口有何影响?
演变为2012年

3.在上面的3中添加了我的输出。
演变为2012年

选项3与自定义端口一起使用。因为我安装了多个pg服务器(PostgreSQL 9.1、9.2和9.3),所以我也必须指向正确的psql。
gpasse

11

如果您正在运行Homebrew,请卸载Postgresql end pg gems:*

$ 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

希望对您有所帮助


来自brew info postgresARCHFLAGS="-arch x86_64" gem install pg
wrdevos

1
这不会删除数据库中的记录吗?
kibaekr 2014年

initdb /usr/local/var/postgres -E utf8作品。谢谢你
克里斯·

8

当我将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

自制软件是否安装公式的特定版本? ”提供了更全面的说明以及解决问题的替代方法。


感谢您的贡献,并提供了明确的指示来重复您的修复。您所包含的链接肯定是全面的,我目前对postgres尚无疑问,因此不确定目前对其他人有多大帮助,但是如果您觉得对其他人有用,请在此处评论。
2014年

我发现它很有用且相关,尽管可能并不直接。他只用了一个比较常见的工具即brew来切换版本,并重复了这些步骤,从而解决了这个问题,到目前为止,很好,该链接涉及到brew特有的更多问题,因此,我可以看到您质疑它的价值在OP的问题中。
wkhatch


5

因此,对于这里的许多问题,似乎人们已经在运行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. 我从“应用程序”目录中运行了postgres,然后再次运行了该命令,该命令可以正常工作。

希望这可以帮助!面条!

另外,此答案对我的帮助最大:https : //stackoverflow.com/a/21503349/3173748


这不是指向Postgres应用程序,而是指向brew安装吗?这可以使您脱离一些有用的软件包(例如,注浆,您无法为Postgres应用安装此软件包,这引起了我无尽的痛苦,现在我在这里)
allthesignals

4

运行时: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

2

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

您想弄清楚尝试启动PostgreSQL的日志在哪里以及PostgreSQL的套接字目录是什么。在构建PG时,默认情况下,套接字目录为/ tmp /。如果在构建PG并随后启动PG时未进行更改,那么您应该能够在/ tmp中看到套接字文件:ls -al / tmp

套接字文件以“。”开头,因此您看不到带有-s的ls。

如果您在此看不到套接字,并且也看不到ps awux | grep postgres,那么PG可能没有运行,或者可能是运行OSX的PG。可能发生的情况是,在本地主机上侦听端口5432时可能会发生冲突-使用netstat -anp查看在5432上侦听的内容(如果有的话)。如果Mac OSX PG已在该端口上侦听,则可能成为问题。

希望有帮助。我听说自制软件会使事情变得有些丑陋,我和很多人鼓励使用VM来代替。


感谢您的贡献。如果它有助于您获得更多背景知识,那么在安装postgres时,homebrew只需运行此脚本。github.com/Homebrew/homebrew-core/blob/master/Formula/…我希望您可以仔细看一下,并可能分享您所发现的任何进一步的见解。我认为人们需要的是一种更容易的方法来调试为什么会收到此错误,以便他们知道要采取什么措施。
演变

根据我对该脚本的了解,可能在HOMEBREW_PREFIX下的“ var”目录中有一个“ postgres.log”。该日志文件将包含有关PG尝试启动的信息(包括由于某种原因启动失败)。这是示例消息,显示PG由于另一个进程在端口5432上侦听而无法启动:
Stephen Frost

2016-12-19 09:11:59.582 EST [20669]日志:无法绑定IPv4套接字:地址已在使用中2016-12-19 09:11:59.582 EST [20669]提示:是另一个邮局主管已经在端口5432上运行?如果不是,请等待几秒钟,然后重试。2016-12-19 09:11:59.582 EST [20669]警告:无法为“ localhost”创建侦听套接字2016-12-19 09:11:59.582 EST [20669]致命:无法创建任何TCP / IP套接字2016 -12-19 09:11:59.582 EST [20669]日志:数据库系统已关闭
Stephen Frost

此外,该脚本似乎不会更改默认套接字目录,因此应为/ tmp /。您可以在PG数据目录(似乎为{HOMEBREW_PREFIX} / var / postgres)中查找postgresql.conf文件,并查找“ unix_socket_directories”。默认情况下,它已被注释掉,但具有默认设置,例如:
Stephen Frost

#unix_socket_directories ='/ tmp'#逗号分隔的目录列表
Stephen Frost

2

我在使用自制软件的Mac 10.15.5上运行时遇到此错误。

有一个名为postmaster.pid的文件,该文件应在postresql退出时自动删除。

如果不执行以下操作

  • brew服务停止postgresql <---在rm可能损坏db之前无法退出
  • 须藤rm /usr/local/var/postgres/postmaster.pid


1

出现此错误的原因之一是,当您重新启动计算机时,本地postgres数据库将关闭。在新的终端窗口中,只需键入:

$psql -h localhost 

重新启动服务器。


1

你好,世界:)
对我而言,最好的但奇怪的方法是做下一件事情。

1)下载postgres93.app或其他版本。将此应用添加到/ Applications /文件夹中。

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

导出PATH = / Applications / Postgres93.app / Contents / MacOS / bin /:$ PATH
这是psql从的路径Postgres93.app。该行(命令)在每次启动控制台时运行。

3)Postgres93.app/Applications/文件夹启动。它启动本地服务器(端口为“ 5432”,主机为“ localhost”)。

4)经过所有这些操作后,我很高兴运行$ createuser -SRDP user_name命令和其他命令,并看到它起作用了!Postgres93.app可以在系统每次启动时运行。

5)另外,如果您想以图形方式查看数据库,则应安装PG Commander.app。这是将Postgres DB视为漂亮的数据表的好方法

当然,它仅对本地服务器有用。如果本说明能帮助遇到此问题的其他人,我将感到很高兴。


1

我有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

这个对我有用。


这个档案对我来说并不存在
allthesignals

1

值多少钱,当我在文件()中输入错字(md4而不是md5)时遇到了同样的错误pg_hba.conf/etc/postgresql/9.5/main/pg_hba.conf

如果您像我一样来到这里,请仔细检查该文件一次,以确保其中没有任何可笑的内容。


pg_hba.conf文件在哪里?
bubakazouba

1
/etc/postgresql/{postgres_version}/main/pg_hba.conf
艾丹·梅伦

0

在本地运行PostgreSQL可能会有不同的问题。我建议清理所有已安装的postgres版本并重新开始。一旦安装完毕,如果您的Rails项目是最新的,则很容易重新创建数据库。db/schema.rb

这是我通常在Mac上安装PostgreSQL的方式。如果要在本地root用户下运行数据库,则可能要省略创建todo用户的最后一步


0

原因之一可能是

postgresql.conf文件中的unix_socket_directories没有与它要查找的目录一起列出。

在问题示例中,它正在寻找目录/ tmp,该目录必须在postgresql.conf文件中提供。

像这样的东西:

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

这个解决方案对我有用。


0

如果您使用MacOS并使用自制软件,那么我发现此答案非常有帮助:

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

对我来说,我的服务器正在运行,但是由于升级,我在连接时遇到了问题(注意:我使用brew服务)。如果Postgres正在运行,请尝试cat /usr/local/var/postgres/server.log查看日志中的内容。我的错误是迁移,而不是连接问题。

同样,在手动迁移之后,他们提出了建议(确实可行),但是我发现用户的表不再存在。尝试使用以下命令来修复该问题:(createdb通过psql回答:FATAL:数据库“ <用户>”不存在


0

运行时出现错误,请重新启动Postgres brew services restart postgresql,然后重试


0

对我来说 rm /usr/local/var/postgres/postmaster.pid无效,因为我使用自制软件安装了特定版本的postgresql。

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

然后brew services restart postgresql@10


-5

非常简单 仅在您的database.yaml文件中添加主机。


例如:host:127.0.0.1或host:localhost。
里卡多-Nextv 2014年

每个人都喜欢一个简单的解决方案。但这如何工作?正如我在上面的评论中所说的那样,对此进行搜索使我走了许多复杂的路。您能否详细说明一下,并让我们提供更多背景信息,以了解问题的根源以及此简单更改如何解决问题。感谢您为这一贡献!:)
2014年

区别在于IP连接无需担心套接字文件的位置。相反,您担心IP地址。
Jim Nasby '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.