195

我最近升级到 OSX 10.7,此时我的 rails 安装在尝试连接到 psql 服务器时完全失败了。当我从命令行使用

psql -U postgres

它工作得很好,但是当我尝试使用相同的用户名和密码运行 rails 服务器或控制台时,我得到了这个错误

...activerecord-3.0.9/lib/active_record/connection_adapters/postgresql_adapter.rb:950:in `initialize': could not connect to server: Permission denied (PGError) 
Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

任何可能发生的想法都会非常有帮助!谢谢!

4

15 回答 15

290

这是一个路径问题。Mac OSX Lion 现在在系统中包含 Postgresql。如果您这样做,which psql您可能会看到HomeBrew 的正确选项,usr/bin/psql而不是哪个。usr/local/bin/psql如果您运行brew doctor,您应该会收到一条消息,说明您需要添加usr/local/bin到 PATH 环境变量的头部。

编辑您的 .bash_profile 或 .profile,或您正在使用的任何 shell 并添加: export PATH=/usr/local/bin:$PATH

作为第一个导出PATH然后退出你的shell会话或源你的文件,source ~/.bash_profile现在应该可以了。

于 2011-07-21T07:17:54.970 回答
90

对于那些感兴趣的人,我拼凑了解决方案。我只需要添加

host: localhost

到我的环境的database.yml,一切都是肉汁。

于 2011-07-21T02:36:11.093 回答
46

我对山狮有这个问题,但唯一对我有用的是这个修复

检查实际目标在哪里:

sudo find / -name .s.PGSQL.5432

我需要创建这个目录:

mkdir /var/pgsql_socket/

然后使用上面查找的结果创建这个符号链接:

ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/

我怀疑对于 Mountain Lion 上的大多数人来说,您只需创建目录并执行符号链接,而不是浪费时间进行查找,除非符号链接不起作用。

PS - 我的 PostgreSQL 是通过官方安装程序安装的。

于 2012-07-26T22:29:48.967 回答
29

如果问题在更改路径后仍然存在(就像对我所做的那样),也试试这个......

gem pristine pg

看来问题(部分)在于 pg gem 本身。当它构建时,它会确定域套接字应该在哪里。如果您在重建 gem 之后更改域套接字的位置,它似乎不会生效。

于 2011-11-29T07:07:46.447 回答
15

对于那些直接从官方安装程序安装的人,只需将主机添加到命令中即可,无需更改路径:

psql -h localhost -U postgres
于 2011-07-23T20:45:43.273 回答
5

我遇到了同样的问题,并且在使 John Wang 的解决方案发挥作用时遇到了问题。正如 Darren 所指出的,pg gem 存在问题。为了让它工作,我需要:

gem uninstall pg

然后重新安装。

这让它工作了。

于 2011-12-10T04:01:53.630 回答
3

我也遇到了这个问题,但我自己安装了 postgres(不是用自制软件)。如果是这种情况,您需要找到 psql 的旧路径(可能是 /usr/local/bin,但对我来说是 /usr/local/pgsql/bin)并将其添加到 $PATH 中。

(之前) which psql=> /usr/bin/psql

(修复)导出 PATH=/usr/local/psql/bin:$PATH

(之后)`which psql' => /usr/local/psql/bin

John Wang 建议source ~/.bash_rc您稍后将其添加到您的 bash_rc 中,这是非常好的。

于 2011-07-22T16:55:07.593 回答
3

这是自制的吗?港口似乎把它放在:

/opt/local/lib/postgresql91 

所以请确保您使用导出

PATH=/opt/local/lib/postgresql91/bin:$PATH

Mac 端口问题: https ://trac.macports.org/ticket/30125

于 2011-11-23T20:53:06.863 回答
1

正如@pilif 所指出的,我对最受好评的答案不满意,因为它们要么是特定于操作系统用户的,要么是重新映射 Postgres 以使用 TCP 而不是域套接字。我见过另一种解决方案,它涉及在系统级别重新排序默认路径以在核心系统路径之前检查 Brew 的路径,但这似乎很危险,因为它可能会影响像这样的所有其他应用程序名称冲突。

该站点详细介绍了我的同事找到的解决方案。它归结为执行一个shell脚本,它将

  1. 将 Postgres 8.4 文件备份到单独的目录中
  2. 符号链接 brew 的 Postgres 安装到位

这附带一个警告,即系统默认 Postgres 是 brew 安装的任何内容,因此您必须判断这是否适合您。我不认为自己需要 Postgres 8.4,特别是超过 9.x,但是 YMMV

于 2012-01-17T02:51:40.200 回答
1

另一个对我有用的可能解决方案是通过删除它来重置 postmaster 文件。只需运行:

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

值得检查日志中的错误,您可以在此处找到:

/usr/local/var/postgres/server.log

我遇到的错误消息是:

FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 161) running in data directory 
"/usr/local/var/postgres"?

之后一切都很好。

于 2012-10-03T00:35:00.140 回答
0

在我的情况下,由于共享内存设置错误,服务器没有启动。起初我很困惑,因为有几个 postgres 进程正在运行,但那些是标准的系统进程。寻找postmaster过程!

我需要做的就是更改共享内存设置。在我的情况下,不需要摆弄路径设置。

于 2011-12-23T10:59:16.723 回答
0

如果您希望永久更改$PATH ,请尝试以下操作:

defaults write $HOME/.MacOSX/environment PATH "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin:/opt/local/bin"

这将重写你的~/.MacOSX/environment.plist.

于 2012-01-20T16:05:53.130 回答
0

您可能需要指定数据库的主机。

于 2012-10-03T18:13:24.313 回答
0

我是 Rails 新手,但将以下内容添加到database.yml对我有用:

host: localhost

port: 5432

不知道为什么 Rails 默认使用域套接字而不是 TCP,而 PostgreSQL 默认不设置域套接字。

于 2014-08-15T21:44:16.523 回答
0

我的 PostgreSQL 安装在 /Library/PostgreSQL 中,因此 /usr/var 的东西对我不起作用。

看来 Woz 是正确的,因为每次我关闭我的 macbook pro 的盖子时它都会崩溃......这对我来说是崩溃后的工作:

sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"
于 2015-01-27T17:47:38.667 回答