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

任何想法可能会发生什么将是超级有益的! 谢谢!

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

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

作为PATH的第一个输出,然后要么退出你的shell会话或源文件source ~/.bash_profile ,它现在应该再次确定。

对于那些有兴趣的人,我拼凑了解决scheme。 我所需要的只是添加

 host: localhost 

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

我在Mountain Lion遇到了这个问题,但唯一能解决这个问题的是这个问题 :

检查实际目标在哪里:

 sudo find / -name .s.PGSQL.5432 

我需要创build这个目录:

 mkdir /var/pgsql_socket/ 

然后使用上面find的结果创build这个符号链接:

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

我怀疑,对于大多数山狮的人,你可以创build目录,并做符号链接,而不是浪费时间做这个发现,除非符号链接不工作。

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

如果问题仍然存在,改变了path(就像我这样做),也请试试这个…

 gem pristine pg 

看来问题(部分)在于gem本身。 当它build立时,它会计算出域套接字的位置。 如果更改了域套接字的位置,那么在重buildgem之前似乎不会生效。

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

 psql -h localhost -U postgres 

我遇到了同样的问题,并且在解决John Wang的解决scheme时遇到了问题。 正如Darren指出的那样,pggem有一个问题。 为了得到它的工作,我需要:

 gem uninstall pg 

然后重新安装。

这是它的工作。

我碰到了这个,但是我自己安装了postgres(不是自制的)。 如果是这样的话,你需要findpsql的旧path(可能是/ usr / local / bin,但是对于我来说是/ usr / local / pgsql / bin)并且将其前置到$ PATH中。

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

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

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

John Wang的build议是在source ~/.bash_rc之后添加到你的bash_rc文件中是很好的。

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

 /opt/local/lib/postgresql91 

所以确保你使用导出

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

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

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

这个网站详细介绍了我的同事find的解决scheme。 这涉及到执行一个单一的shell脚本

  1. 在一个单独的目录下备份Postgres 8.4文件
  2. 将Brew的安装Postgres符号链接到位

这与警告,系统默认的Postgres是无论brew已安装,所以你必须作出判断呼吁,是否适合你。 我没有看到自己需要Postgres 8.4而不是9.x,而是YMMV

另一个可行的解决scheme是通过删除postmaster文件重新设置。 只需运行:

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

这是值得检查日志中的错误,你可以在这里find:

 /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"? 

一切都很好,事后。

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

我所需要做的就是改变共享内存设置 。 在我的情况下不需要摆弄path设置。

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

如果您喜欢$ 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

我是Rails新手,但添加以下内容到database.yml为我工作:

 host: localhost port: 5432 

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

我的PostgreSQL安装在/ Library / PostgreSQL中,所以/ usr / var的东西不适合我。

看来,Woz是正确的,因为每当我closures我的MacBook Pro的盖子崩溃…这是什么工作后崩溃对我来说:

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