升级到 OSX 10.7 Lion 后修复 Postgresql

Posted

技术标签:

【中文标题】升级到 OSX 10.7 Lion 后修复 Postgresql【英文标题】:Repairing Postgresql after upgrading to OSX 10.7 Lion 【发布时间】:2011-10-09 21:11:58 【问题描述】:

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

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

【问题讨论】:

这也击中了我办公室的某个人;我们在获取错误的二进制文件时遇到了类似的问题,在尝试以不同的权限连接到不同目录中的域套接字时还有一个额外的问题,而且看起来升级吞噬了本地数据库上的所有数据。幸运的是,这只是一个开发盒,所以这不是什么大不了的事,但有点令人讨厌。 :) 我今天自己打了这个,记得昨天读过你的问题。很高兴看到@John Wang 出来解释了 :) 【参考方案1】:

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

host: localhost

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

【讨论】:

注意这一点:此设置将访问从域套接字更改为 TCP 连接。虽然它可能有效,但您可能会失去机器上的一些性能和可用端口,这可能是一个问题,具体取决于您的设置。约翰提供的解决方案是正确的。 'gem uninstall pg'(选择所有版本),然后再次'bundle'从你的 Gemfile 安装 pg 版本对我有用。 感谢 Dave G,这对我也有用。我安装了 10.7.3 更新并 rake db:migrate 抱怨。这解决了它。 这对我也有用。但是我把密码和用户名留空了。 我想这会起作用,因为它会强制 TCP/IP 连接。【参考方案2】:

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

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

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

【讨论】:

这修复了它。您还可以编辑 /etc/paths 并确保 /usr/local/bin 在顶部 另外,请注意,如果您在修复路径之前安装了 pg gem,它将使用错误的 psql。如果是这样,请卸载 pg gem,然后重新安装它(gem uninstall pg && gem install pg)。 这是自制的吗?端口似乎把它放在:/opt/local/lib/postgresql91 所以确保你使用 export PATH=/opt/local/lib/postgresql91/bin:$PATH 我的路径报告正确,但 Troy 的解决方案是卸载 pg gem,然后让 bundler 重新安装对我有用。 澄清一下 - 看起来你最好正确设置路径,然后卸载/重新安装 pg gem【参考方案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 中是金。

【讨论】:

【参考方案4】:

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

psql -h localhost -U postgres

【讨论】:

【参考方案5】:

这是自制的吗? Ports 似乎将其放入:

/opt/local/lib/postgresql91 

所以一定要使用 export

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

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

【讨论】:

【参考方案6】:

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

gem pristine pg

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

【讨论】:

这对我有用,即使在我修复了 PATH 并重新安装了没有原始的 pg gem 之后。 谢谢你的提示,达伦【参考方案7】:

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

gem uninstall pg

然后重新安装。

这让它起作用了。

【讨论】:

我不得不运行两次...奇怪。我确实卸载了 pg 然后捆绑安装,但它失败了。然后只是 gem install pg 并且它起作用了。谢谢!【参考方案8】:

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

我需要做的就是change the shared memory settings。在我的情况下,不需要摆弄路径设置。

【讨论】:

【参考方案9】:

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

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

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

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

【讨论】:

【参考方案10】:

如果您希望永久更改 $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】:

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

检查实际目标在哪里:

sudo find / -name .s.PGSQL.5432

我需要创建这个目录:

mkdir /var/pgsql_socket/

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

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

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

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

【讨论】:

我有一种感觉,它可能适合我,但无法让它发挥作用。我得到这个:ln:/var/pgsql_socket/:没有这样的文件或目录 对不起,我忘了我也遇到了。添加了额外的步骤来回答。 祝福你,本。非常感谢。【参考方案12】:

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

之后一切都很好。

【讨论】:

我只从命令行遇到了这个问题。删除文件 /usr/local/var/postgres/postmaster.pid 解决了我的问题。【参考方案13】:

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

【讨论】:

【参考方案14】:

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

host: localhost

port: 5432

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

【讨论】:

【参考方案15】:

我的 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"

【讨论】:

以上是关于升级到 OSX 10.7 Lion 后修复 Postgresql的主要内容,如果未能解决你的问题,请参考以下文章

Mac OSX 10.7 Lion 音频单元效果模板编译失败

OSX 10.7 Lion 上的 JDK

连接不可用 - Lion OSX 升级后出现 Xcode 错误

如何让 ibm_db 或 PyDB2 python 模块在 Mac OS X 10.7 Lion 中与 DB2 一起使用?

OSX Lion 上未生成代码覆盖率文件

如何为 OSX Mountain Lion 上的应用程序设置环境变量?