升级到OSX 10.7 Lion后修复PostgreSQL

我最近升级到了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"?

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

61440 次浏览

对于那些感兴趣的人,我拼凑出了解决方案。我所需要的只是补充

host: localhost

到我的环境的database.yml,一切都很顺利。

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

编辑您的.bash_配置文件或.profile,或者您正在使用的任何shell,并添加: export PATH=/usr/local/bin:$PATH

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

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

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

(固定) 导出路径=/usr/local/psql/bin:$PATH

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

JohnWang建议source ~/.bash_rc,然后将其添加到您的bash_中,RC是黄金。

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

psql -h localhost -U postgres

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

/opt/local/lib/postgresql91

因此,请确保使用导出

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

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

如果在更改路径后问题仍然存在(就像我一样),也请尝试此..

gem pristine pg

看来问题(部分)在于PG Gem本身。当它构建时,它会计算出域套接字应该在哪里。如果您在事后更改了域套接字的位置,那么在您重建gem之前,它似乎不会生效。

我也遇到了同样的问题,在让John Wang的解决方案发挥作用时遇到了问题。正如Darren所指出的,PG Gem存在一个问题。为了让它工作,我需要:

gem uninstall pg

然后重新安装。

这让它起作用了。

在我的例子中,由于错误的共享内存设置,服务器没有启动。一开始我很困惑,因为有几个Postgres进程正在运行,但这些都是标准的系统进程。寻找postmaster流程!

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

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

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

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

需要注意的是,系统默认的Postgres是BREW安装的任何东西,因此您必须判断它是否适合您。我不认为自己需要Postgres 8.4,特别是9.X,但YMMV

如果您想永久更改您的$路径,请尝试以下操作:

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

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

我在使用Mountain Lion时遇到了这个问题,但唯一对我有用的是这个修复

检查实际目标的位置:

sudo find / -name .s.PGSQL.5432

我需要创建这个目录:

mkdir /var/pgsql_socket/

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

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

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

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

另一个对我有用的解决方案是通过删除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"?

之后一切都很好。

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

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

host: localhost


port: 5432

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

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

看来沃兹是正确的,因为每次我合上我的苹果笔记本Pro的盖子,它就会崩溃…… 以下是危机后对我起作用的方法:

sudo su postgres -c "/Library/PostgreSQL/9.2/bin/pg_ctl -m fast -D /Library/PostgreSQL/9.2/data restart"