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

问题描述 投票:129回答:20

像其他一些人一样,当我在我的项目中运行rake db:migrate或甚至为我的Ruby on Rails 3.2应用程序尝试大多数数据库任务时,我收到此错误。

PGError(无法连接到服务器:没有这样的文件或目录。服务器是否在本地运行并接受Unix域套接字上的连接“/tmp/.s.PGSQL.5432”?

很久以前我用PostgreSQL安装了Homebrew,并且在最近尝试安装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 localhost

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路径的内容实际上都能找到真正的路径,如果这有意义的话。

这是我发现更多东西要尝试的链接,特别是如上所述的qmlxswpoi。我仍然希望有人能够对OS X上安装PostgreSQL背后的概念进行合理的解释,以及为什么这么困难。

帮助进行故障排除的最新见解:

Mac OSX Lion Postgres does not accept connections on /tmp/.s.PGSQL.5432

然后运行:

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

要考虑的关键是:

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

这是决定运行PostgreSQL的核心要求,也是我所说的导致大多数这些问题的原因。

postgresql osx-snow-leopard homebrew
20个回答
98
投票

检查postgres目录中没有postmaster.pid,可能是$ echo $PATH

删除它并启动服务器。

检查 - /usr/local/var/postgres/是launchctl的绝佳包装。


2
投票

我真的不懂Mac或Homebrew,但我非常了解PostgreSQL。

您想知道PostgreSQL尝试启动日志的位置以及PostgreSQL的套接字目录。默认情况下,在构建PG时,套接字目录为/ tmp /。如果你在构建PG时没有改变它,然后你启动了PG,你应该能够在/ tmp中看到一个套接字文件:ls -al / tmp

套接字文件以“。”开头,所以你不会看到它带有'-a'到ls。

如果你没有在那里看到套接字,并且你没有看到ps awux中的任何内容grep postgres,然后PG可能没有运行,或者它可能是,并且它是OSX安装的。可能发生的事情是,您可能在localhost上使用端口5432时遇到冲突 - 使用netstat -anp来查看5432上正在侦听的内容(如果有的话)。如果Mac OSX PG已经在侦听该端口,那么可能是问题。

希望有所帮助。我听说自制软件可以让事情变得有点丑陋,很多人都在谈论鼓励使用虚拟机。


1
投票

原因

Lion附带已安装的postgres版本,默认情况下使用这些二进制文件。一般来说,你可以通过使用自制的postgres二进制文件的完整路径解决这个问题,但是其他程序可能仍然存在问题。

解决方案

卷曲https://github.com/facebook/react-native/issues/18760#issuecomment-410533581 | SH

通过

http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh


1
投票

你好,世界 :) 对我来说,最好但最奇怪的方法是做下一件事。 1)下载http://nextmarvel.net/blog/2011/09/brew-install-postgresql-on-os-x-lion/或其他版本。将此应用添加到/ Applications /文件夹中。

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

export PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATH
It's a PATH to .bash_profile from psql. The row (command) runs every time console is started.

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

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

5)此外,如果您想以图形方式查看数据库,则应安装Postgres93.app。将postgres数据库视为漂亮的数据表是一种很好的方式

当然,它仅对本地服务器有用。如果这些指示可以帮助那些面临这个问题的人,我将很高兴。


1
投票

我有PostgreSQL 9.3并得到了同样的错误,

无法连接到服务器:连接被拒绝服务器是否在主机“localhost”(127.0.0.1)上运行并接受端口5432上的TCP / IP连接?

我修复了这个:

PG Commander.app

这个对我有用。


1
投票

为了它的价值,当我在我的chmod 777 /var/lib/pgsql/9.3/data/pg_hba.conf service postgresql-9.3 restart 文件(md4)中输入错字(md5而不是pg_hba.conf)时,我遇到了同样的错误

如果你像我一样到达这里,请仔细检查该文件一次,以确保那里没有任何荒谬的东西。


0
投票

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

/etc/postgresql/9.5/main/pg_hba.conf

重启服务器。


0
投票

在本地运行PostgreSQL可能会有不同的问题。我建议清理所有安装的postgres版本并重新开始。一旦安装完成,如果你的rails项目具有最新的$psql -h localhost ,则很容易重新创建数据库

这是我通常db/schema.rb。如果您在本地root用户下运行数据库,则可能需要省略创建install PostgreSQL on a Mac用户的最后一步


0
投票

其中一个原因可能是

postgresql.conf文件中的unix_socket_directories未与其查找的目录一起列出。

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

这样的事情:

todo

这个解决方案对我有用。


0
投票

如果您使用的是MacOS并使用自制软件,我发现这个答案非常有帮助:

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

对我来说,我的服务器正在运行,但由于升级,我遇到连接问题(注意:我使用brew服务)。如果Postgres正在运行,请尝试https://stackoverflow.com/a/27708774/4062901并查看日志所说的内容。我的错误是迁移,而不是连接问题。

他们建议手动迁移后(这确实有效)我发现我的用户不再有桌子了。尝试此命令来解决这个问题:cat /usr/local/var/postgres/server.log(通过createdb回答)


0
投票

只要运行psql: FATAL: database "<user>" does not exist出现错误就重新启动Postgres,然后再试一次


57
投票

更新:如果你在OSX上,这里有一个更好的修复......

https://github.com/mperham/lunchy


旧答案:

这是修复,更多信息在这里:

http://postgresapp.com/

首先,停止db,然后

  1. cd / var
  2. rm -r pgsql_socket
  3. ln -s / tmp pgsql_socket
  4. chown _postgres:_postgres pgsql_socket
  5. 重启postgres(不是你的电脑)

-5
投票

这很简单。仅在database.yaml文件中添加主机。


48
投票

对我来说,这是有效的

https://github.com/mxcl/homebrew/issues/5004

14
投票

对于你提到的上述错误,这对我有用..

1)可能会更改postgres.conf文件中未指定的默认端口,如果您在安装时提到了其他默认端口号5432。

(要么)

2)更改postgresql.conf文件中的端口号,然后重新启动数据库服务器

(要么)

3)代替psql类型的完整命令

“psql -p 5432 -h localhost”

  • 服务器名称和端口号

10
投票

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

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

下载并运行以下脚本以修复/ usr / local:* $ gem uninstall pg $ brew uninstall postgresql 的权限

https://gist.github.com/rpavlik/768518

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

$ ruby fix_homebrew.rb

要在登录运行时启动postgresql:

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

或者手动启动。

安装pg gem

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

我希望有所帮助


8
投票

当我将Postgres升级到9.3.x时,我遇到了这个问题。对我来说,快速修复是降级到之前的9.2.x版本(无需安装新版本)。

$ gem install pg

$ 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 答案提供了更全面的解释以及解决问题的其他方法。


5
投票

所以对于这里的很多问题,似乎人们已经在运行psql并且不得不删除This。但是,我没有那个问题,因为我从来没有在我的系统中正确安装postgres。

这是一个在MAC OSX Yosemite中适用于我的解决方案

  1. 我去了postmaster.pid并下载了应用程序。
  2. 我将应用程序移动到Application /目录
  3. 我将它添加到$ PATH,将其添加到.bashrc或.bash_profile或.zshrc:http://postgresapp.com/
  4. 我从Applications目录运行postgres并再次运行命令并且它工作正常。

希望这可以帮助! Toodles!

此外,这个答案对我帮助最大:export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin


4
投票

当你运行:psql -p 5432 -h localhost它不使用环回驱动程序但使用真正的套接字,因此你需要配置postgres接受套接字连接。因此即使pgadmin和其他客户端可能工作,psql也不会。

您需要更改postgresql.conf文件和pg_hba.conf文件,以便允许通过实际套接字进行连接。这也将允许从远程ip连接,这就是默认情况下禁用它的原因。

这些文件位于数据目录中,但实际位置可能会有所不同,具体取决于postgres的安装方式。运行postgres后,运行命令:

https://stackoverflow.com/a/21503349/3173748

这两个文件是-D目录(可能是/ usr / local / pgsql / data)。

对于postgresql.conf文件,取消注释listen_address并将其更改为:

ps -ef | grep postmaster

对于pg_hba.conf添加行:

listen_address = '*'

3
投票

我通过升级postgres修复了这个问题。

host all all 0.0.0.0/0 md5

然后我还必须升级数据库以与新的主要版本兼容,因为我从10升级到11。

brew update
brew upgrade

(来源brew postgresql-upgrade-database

© www.soinside.com 2019 - 2024. All rights reserved.