148

像其他一些人一样,当我在我的项目中运行 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,据我所知,这会导致大多数这些问题。

4

22 回答 22

110

Check there is no postmaster.pid in your postgres directory, probably /usr/local/var/postgres/

remove this and start server.

Check - https://github.com/mperham/lunchy is a great wrapper for launchctl.

于 2014-02-25T13:24:18.887 回答
63

对我来说,这行得通

rm /usr/local/var/postgres/postmaster.pid
于 2015-01-05T14:26:51.937 回答
60

如果您在 OS X 上,“ Postgres.app ”是一个更好的解决方案


这是修复:

  1. 停止数据库
  2. cd /var
  3. sudo rm -r pgsql_socket
  4. sudo ln -s /tmp pgsql_socket
  5. chown _postgres:_postgres pgsql_socket
  6. 重启 PostgreSQL(不是你的电脑)

更多信息可在“ postgresql 9.0.3. on Lion Dev Preview 1 ”中找到。

于 2013-01-29T21:11:31.940 回答
15

对于您提到的错误,这对我有用。执行以下操作之一

  1. postgres.conf如果您在安装时使用了默认端口以外的其他东西, 可能会更改文件中指定的默认端口5432

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

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

    psql -p 5432 -h localhost   
    
    • 服务器名称和端口号
于 2012-09-18T10:17:23.947 回答
13

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

我希望有帮助

于 2013-05-22T13:53:46.517 回答
10

我通过升级 postgres 解决了这个问题。

brew update
brew upgrade

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

brew postgresql-upgrade-database

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

于 2019-02-01T03:23:09.820 回答
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

Homebrew install specific version of formula? ” 提供了更全面的解释以及解决问题的替代方法。

于 2013-12-30T13:41:45.417 回答
7

我在使用自制软件在 Mac 10.15.5 上运行时遇到了这个错误,这似乎是一个更新的解决方案,适用于上述解决方案。

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

如果它不执行以下操作

  • brew services stop postgresql <--- 在 rm 之前无法退出可能会损坏数据库
  • sudo rm /usr/local/var/postgres/postmaster.pid
于 2020-06-28T12:20:14.383 回答
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. 我从 Applications 目录运行 postgres 并再次运行命令并且它工作。

希望这可以帮助!面条!

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

于 2016-03-16T22:09:38.933 回答
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
于 2013-10-21T01:36:09.440 回答
3

我不太了解 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 已经在侦听该端口,那么这可能成为问题。

希望有帮助。我听说自制软件会让事情变得有点难看,我交谈过的很多人都鼓励使用虚拟机。

于 2016-12-18T03:04:10.310 回答
2

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

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

然后brew services restart postgresql@10

于 2020-03-23T07:10:13.120 回答
1

Hello world :)
对我来说最好但奇怪的方法是做接下来的事情。

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

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

导出 PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATH
这是一个 PATH 到psqlfrom Postgres93.app。每次启动控制台时都会运行该行(命令)。

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

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

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

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

于 2014-02-01T20:31:45.007 回答
1

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

$psql -h localhost 

重新启动服务器。

于 2013-11-11T19:12:08.350 回答
1

The Cause

Lion comes with a version of postgres already installed and uses those binaries by default. In general you can get around this by using the full path to the homebrew postgres binaries but there may be still issues with other programs.

The Solution

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

Via

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

于 2013-07-22T04:03:47.713 回答
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

这个对我有用。

于 2015-01-20T10:45:39.710 回答
1

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

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

于 2015-08-09T20:21:26.643 回答
1

只要通过运行出现错误就重新启动Postgres brew services restart postgresql,然后再试一次

于 2019-03-17T00:20:44.723 回答
0

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

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

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

同样在他们提出的手动迁移之后(确实有效,但是)我发现我的用户不再有一个表。试试这个命令来解决这个问题:(createdb通过psql 回答:致命:数据库“<用户>”不存在

于 2016-11-20T19:32:02.337 回答
0

原因之一可能是

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

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

像这样的东西:

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

这个解决方案对我有用。

于 2016-10-06T13:58:07.690 回答
0

在本地运行 PostgreSQL 可能会有不同的问题。我建议清理所有已安装的 postgres 版本并重新开始。安装后,如果您的 rails 项目是最新的,那么重新创建数据库非常容易db/schema.rb

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

于 2015-08-22T05:34:35.457 回答
-5

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

于 2014-04-12T01:45:04.167 回答