升级到OSX 10.7 Lion后修复Postgresql

时间:2011-07-21 02:22:16

标签: ruby-on-rails ruby-on-rails-3 macos postgresql osx-lion

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

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

14 个答案:

答案 0 :(得分:291)

这是一个路径问题。 Mac OSX Lion现在包含系统中的Postgresql。如果您执行which psql,您可能会看到usr/bin/psql而不是usr/local/bin/psql,这是HomeBrew的正确答案。如果您运行brew doctor,您应该会收到一条消息,指出您需要将usr/local/bin添加到PATH env变量的开头。

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

作为PATH的第一个导出,然后退出shell会话或使用source ~/.bash_profile来源文件,现在它应该再次正常。

答案 1 :(得分:90)

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

host: localhost

到我的环境的database.yml,所有都是肉汁。

答案 2 :(得分:46)

我对Mountain Lion遇到了这个问题,但唯一对我有用的是this fix

检查实际目标的位置:

sudo find / -name .s.PGSQL.5432

我需要创建这个目录:

mkdir /var/pgsql_socket/

然后使用上面的find中的结果创建此符号链接:

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

我怀疑对于Mountain Lion上的大多数人来说,你可以创建目录并执行符号链接,除非符号链接不起作用,否则不要浪费时间进行查找。

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

答案 3 :(得分:15)

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

psql -h localhost -U postgres

答案 4 :(得分:5)

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

gem uninstall pg

然后重新安装。

哪个有效。

答案 5 :(得分:3)

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

(前) which psql =>的/ usr /斌/ PSQL

(FIX) export PATH = / usr / local / psql / bin:$ PATH

(后) `哪个psql'=>的/ usr /本地/ PSQL / bin中

John Wang建议source ~/.bash_rc之后你将它添加到你的bash_rc是很好的。

答案 6 :(得分:3)

这是自制软件吗? Ports似乎把它放进去了:

/opt/local/lib/postgresql91 

因此请确保使用导出

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

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

答案 7 :(得分:1)

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

This site详细说明了我的同事找到的解决方案。它归结为执行一个

的shell脚本
  1. 将Postgres 8.4文件备份到一个单独的目录中
  2. 符号化了Brew的Postgres安装到位
  3. 这有一点需要注意,系统默认Postgres是brew安装的,所以你必须判断一下这是否适合你。我不认为自己需要Postgres 8.4专门用于9.x,而是YMMV

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

之后一切都很顺利。

答案 9 :(得分:0)

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

我需要做的就是change the shared memory settings。在我的案例中,不需要摆弄路径设置。

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

答案 11 :(得分:0)

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

答案 12 :(得分:0)

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

host: localhost

port: 5432

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

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