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

像其他人一样,当我运行rake数据库时遇到了这个错误:在我的项目中进行迁移,甚至为我的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 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上进行更多的search,但是基本上你可以把PostgreSQL连接起来,这样看起来在tmppath中的东西实际上就能find真正的path。

这是我find几个要尝试的东西的链接,特别是像上面那样做符号链接, 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之前,要运行PostgreSQL副本的path条目。

这是决定运行哪个PostgreSQL的一个核心要求,也是我被告知的大部分问题。

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

删除这个并启动服务器。

检查 – https://github.com/mperham/lunchy是一个伟大的launchctl包装。;

更新:这是一个更好的修复,如果你在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(而不是你的电脑)

对我来说,这个工作

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

对于你提到的上述错误,这为我工作。

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

(要么)

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

(要么)

3)而不是像psqltypes的完整命令

“psql -p 5432 -h localhost”

  • 服务器名称和端口号

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

在login时启动launchd启动postgresql:

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

或者手动启动。

安装pg gem

 $ gem install pg 

我希望有帮助

当我将Postgres升级到9.3.x时,我遇到了这个问题。 对我来说,快速解决scheme是降级到我之前拥有的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 

这个答案提供了一个更全面的解释,以及解决问题的其他方法。

所以对于这里的很多问题,似乎人们已经在运行psql,并且必须删除postmaster.pid 。 然而,我没有这个问题,因为我甚至没有正确安装postgres在我的系统。

这是一个在MAC OSX优胜美地为我工作的解决scheme

  1. 我去了http://postgresapp.com/并下载了应用程序。;
  2. 我把应用程序移动到应用程序/目录
  3. 我将它添加到.bashrc或.bash_profile或.zshrc中,将其添加到$ PATH中: export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
  4. 我从Applications目录运行了postgres,然后再次运行这个命令并运行。

希望这可以帮助! Toodles!

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

在运行:psql -p 5432 -h localhost时,它不使用环回驱动程序,而是使用真实的套接字,因此您需要将postgresconfiguration为接受套接字连接。 因此,即使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 

原因

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

解决scheme

curlhttp://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh | SH

通过

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

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

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

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

  export PATH = / Applications / Postgres93.app / Contents / MacOS / bin /:$ PATH 

这是来自Postgres93.app psql的path。 每次启动控制台时,该行(命令)都会运行。

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

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

5)另外,如果你想看到你的数据库graphics你应该安装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

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

我不是很了解Mac或Homebrew,但我很了解PostgreSQL。

你想知道PostgreSQL试图启动的日志以及PostgreSQL的套接字目录是什么。 默认情况下,当您构buildPG时,套接字目录是/ tmp /。 如果你在编译PG时没有改变它,然后启动了PG,那么你应该可以在/ tmp中看到一个套接字文件:ls -al / tmp

套接字文件以“。”开头,所以你不会用“-a”来查看。

如果你没有在那里看到一个套接字,并且你没有看到ps awux |中的任何东西 grep postgres,那么PG可能没有运行,或者它可能是OSX安装的。 可能发生的情况是,你可能会在localhost的端口5432上听到冲突,使用netstat -anp来查看5432上是否正在侦听。如果Mac OSX PG已经在该端口上侦听,那么可能会成为问题。

希望有所帮助。 我听说自制软件可能会让事情变得有些丑陋,我曾经谈到的很多人鼓励使用虚拟机。

出现此错误的一个原因是当您重新启动计算机时,本地postgres数据库closures。 在新的terminal窗口中,只需input:

 $psql -h localhost 

重新启动服务器。

在本地运行PostgreSQL可能会有不同的问题。 我会build议清理安装的所有版本的postgres,并开始新鲜。 一旦你安装了它,如果你的rails项目是最新的db/schema.rb ,那么重新创build你的数据库是很容易的

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

其中一个原因可能是这样的

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

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

像这样的东西:

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

这个解决scheme为我工作。

如果你在MacOS和使用自制软件,我发现这个答案非常有用:

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

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

他们提出的手动迁移之后,他们也提出了这个问题,但是我发现我的用户已经不再有一张桌子了。 试试这个命令来修复: createdb (通过psql回答:FATAL:database“<user>”不存在 )

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