Repairing postgresql after upgrade to OSX Mavericks
最近对OSX Mavericks的升级破坏了我的Rails应用程序的数据库连接。
当我尝试从数据库中提取数据时,服务器返回以下错误:
1 2 3 4 5 6 7 8 9 | PG::ConnectionBad (could not connect to server: Connection refused Is the server running on host"localhost" (::1) and accepting TCP/IP connections on port 5432? could not connect to server: Connection refused Is the server running on host"localhost" (127.0.0.1) and accepting TCP/IP connections on port 5432? could not connect to server: Connection refused Is the server running on host"localhost" (fe80::1) and accepting TCP/IP connections on port 5432? |
当尝试运行
1 2 3 | psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket"/tmp/.s.PGSQL.5432"? |
我已经尝试了许多互联网上可用的解决方案。这样重新安装pg gem并在my database.yml中设置host:localhost。my/usr/local/var/postgres/pg_hba.conf文件显示:
1 2 3 4 5 6 7 8 9 10 11 12 13 | # TYPE DATABASE USER ADDRESS METHOD #"local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust # Allow replication connections from localhost, by a user with the # replication privilege. #local replication RyanKing trust #host replication RyanKing 127.0.0.1/32 trust #host replication RyanKing ::1/128 trust |
哪个psql返回:
有什么解决办法吗?一些解决方案建议我需要将$path改为以前的postgres安装,因为新版本的postgres将与mavericks一起添加。我怎样才能找到那个地方?它很可能是与自制啤酒一起安装的,但我不确定。
如果是通过自制安装的,请尝试(从
1 2 | launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist |
这将重新加载它。postgres.app my default将找不到您的数据库(您需要将其指向
从评论中提取。
好吧,看来你已经安装了9.2.3,我要做的就是这个。
1 | postgres -D /usr/local/var/postgres |
然后全部备份。
杀死邮政
一个
有同样的问题。发现升级很难杀死进程,留下了postgres pid文件。所以,不要像我这样愚蠢,点击重启升级你的OSX。请确保在升级之前完全关闭所有设备。
tl;dr启动postgres应用程序!
在小牛队升级后,我也有同样的经历:
- 安装和启动9.3(在我的应用程序文件夹中显示为Postgres93)
- 移动9.2到垃圾桶
- 看到Rails失败,因为我的数据库没有迁移
然后我回去:
- 退出9.3
- 从垃圾桶中恢复了9.2
- 启动9.2
一切顺利!
然后我意识到
- 问题是Postgres没有在我的Mavericks安装之后运行
- 我以前从未做过任何明确的事情来让Postgres在启动时运行,但是…
- Mac OS总是在重新启动后重新启动Postgres,因为它以前正在运行
最简单的解决方案是使用http://postgresapp.com
要通过自制安装,请确保执行
尝试将此添加到.bash_配置文件中,如下所述:
1 | export PGHOST=localhost |
我最近在升级到10.9.4时遇到了这个问题。
经过一天的反复试验,我找到了joho的这篇文章,它解决了我的问题:https://gist.github.com/joho/3735740
请确保更改版本以匹配安装版本。如果您像我一样安装了多个版本,您可以通过访问cd/usr/local/cellor/postgresql来查看哪些版本,然后执行下面的步骤,但更改版本号以匹配您的安装。
综上所述:
1 2 3 4 5 6 7 8 | $ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist $ mv /usr/local/var/postgres /usr/local/var/postgres9.2 $ brew update $ brew upgrade postgresql $ initdb /usr/local/var/postgres -E utf8 $ pg_upgrade -b /usr/local/Cellar/postgresql/9.2.1/bin -B /usr/local/Cellar/postgresql/9.3.4/bin -d /usr/local/var/postgres9.2 -D /usr/local/var/postgres $ cp /usr/local/Cellar/postgresql/9.3.4/homebrew.mxcl.postgresql.plist ~/Library/LaunchAgents/ $ pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start |
如果您使用的是Ruby,还可以:
1 | $ gem pristine pg |
希望这有帮助!它为我
如果您通过.dmg安装,您可以从postgres安装程序重新安装(在我的例子中是postgresql-9.1.3-1-osx.dmg)。可能还需要重新启动。我昨天才这么做-我的数据库没有被删除,现在一切都很好。
从雪豹到山狮也发生了类似的事情:
山狮Postgres无法连接
如果您在从约塞米蒂升级后找到了这个页面,那么需要另一种方法来解决这个问题。从本质上讲,升级到约塞米蒂会破坏一些文件。您可以在这里找到问题和解决方案!.
安装
1 | sudo ARCHFLAGS="-arch x86_64" gem install pg |
如果不是这样的话,那么在我的情况下,这个命令修复了这个问题,因为它在OS升级到
1 | sudo PATH=$PATH:/Applications/Postgres.app/Contents/Versions/[Version-Number]/bin gem install pg -v [gem version] |
另外,请确保您已经为
如果使用自制升级,问题可能在于数据库格式。直接运行postgres命令检查:
1 2 3 | $ postgres FATAL: database files are incompatible with server DETAIL: The data directory was initialized by PostgreSQL version 9.2, which is not compatible with this version 9.3.4. |
因为我的开发数据库都是种子数据,所以我只是把它们吹走了。
1 2 | $ rm -rf /usr/local/var/postgres $ initdb |
当然,因为这会杀死一切,所以在rake db:create成功之前,您需要重新创建角色。
1 | $ createuser -s MyApp |
如果您不知道角色名,只需运行rake db:create。它会告诉你的。