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

时间:2012-09-18 08:19:40

标签: postgresql osx-snow-leopard homebrew

与其他一些人一样,当我在我的项目中运行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路径的东西实际上都会找到真正的路径,如果这是有道理的。

这是我发现更多内容的链接,特别是按照上面的方式执行符号链接 Mac OSX Lion Postgres does not accept connections on /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路径之前COMES。

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

22 个答案:

答案 0 :(得分:97)

检查postgres目录中没有postmaster.pid,可能是/usr/local/var/postgres/

删除它并启动服务器。

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

答案 1 :(得分:56)

更新:如果您使用OSX,这里有更好的修复...

http://postgresapp.com/


旧答案:

以下是修复,更多信息:

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

首先,停止数据库,然后

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

答案 2 :(得分:47)

对我而言,这是有效的

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

答案 3 :(得分:14)

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

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

(OR)

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

(OR)

3)而不是psql类型的完整命令,如

“psql -p 5432 -h localhost”

  • 服务器名称和端口号

答案 4 :(得分:10)

如果您正在运行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

我希望有所帮助

答案 5 :(得分: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

This回答提供了更全面的解释以及解决问题的其他方法。

答案 6 :(得分:5)

因此,对于此处的许多问题,似乎人们已经在运行psql并且必须删除postmaster.pid。但是,我没有那个问题,因为我从来没有在我的系统中正确安装postgres。

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

  1. 我去了http://postgresapp.com/并下载了该应用。
  2. 我将应用移动到了应用程序/目录
  3. 我将它添加到$ PATH,将其添加到.bashrc或.bash_profile或.zshrc:export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
  4. 我从Applications目录运行了postgres并再次运行命令,它运行良好。
  5. 希望这有帮助! Toodles!

    此外,这个答案对我最有帮助:https://stackoverflow.com/a/21503349/3173748

答案 7 :(得分:4)

我在使用自制软件的Mac 10.15.5上运行时遇到此错误,并且似乎是一种更新的解决方案,可以在上述解决方案无法使用的情况下工作。

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

如果不执行以下操作

  • brew服务停止了postgresql <---在rm可能破坏数据库之前未能退出
  • sudo rm /usr/local/var/postgres/postmaster.pid

答案 8 :(得分: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

答案 9 :(得分:3)

我通过升级postgres来解决此问题。

brew update
brew upgrade

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

brew postgresql-upgrade-database

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

答案 10 :(得分:2)

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

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

套接字文件以&#34;。&#34;开头,因此您无法通过&#39; -a&#39;来查看它。到ls。

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

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

答案 11 :(得分:1)

你好世界:)
对我来说最好但最奇怪的方法就是做下一件事。

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

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

export PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATH
这是来自psql的{​​{1}}的路径。每次启动控制台时都会运行行(命令)。

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

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

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

的好方法

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

答案 12 :(得分:1)

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

  

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

我用以下方法解决了这个问题:

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

它对我有用。

答案 13 :(得分:1)

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

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

答案 14 :(得分:1)

原因

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

解决方案

  

curl http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh | SH

通过

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

答案 15 :(得分:0)

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

$psql -h localhost 

重启服务器。

答案 16 :(得分:0)

在本地运行PostgreSQL可能会有不同的问题。我建议清理所有安装的postgres版本并重新开始。安装完成后,如果您的rails项目具有最新版本db/schema.rb

,则可以非常轻松地重新创建数据库

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

答案 17 :(得分:0)

其中一个原因可能是

postgresql.conf文件中的unix_socket_directories未列出它正在查找的目录。

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

类似的东西:

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

这个解决方案对我有用。

答案 18 :(得分:0)

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

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

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

在他们建议的手动迁移之后(这确实有效)我发现我的用户不再有桌子了。尝试使用此命令来解决此问题:connect(a, b). connect(a, d). connect(a, e). connect(b, a). connect(b, c). ... (通过psql: FATAL: database "<user>" does not exist回答)

答案 19 :(得分:0)

只要出现错误,请通过运行 void getallprocesses(string path) { Process[] processlist = Process.GetProcesses(); foreach (Process process in processlist) { try { if (string.Compare(process.MainModule.FileName, path, StringComparison.OrdinalIgnoreCase) == 0) { //hit } } catch { } } } 重新启动Postgres,然后重试

答案 20 :(得分:0)

对我来说,命令rm /usr/local/var/postgres/postmaster.pid不起作用,因为我安装了带有自制软件的特定版本的Postgresql。

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

然后brew services restart postgresql@10

答案 21 :(得分:-5)

这非常简单。只在database.yaml文件中添加主机。