关于ruby on rails:升级到OSX Mavericks后修复postgresql

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?

当尝试运行psql时,我得到:

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返回:/usr/local/bin/psql

有什么解决办法吗?一些解决方案建议我需要将$path改为以前的postgres安装,因为新版本的postgres将与mavericks一起添加。我怎样才能找到那个地方?它很可能是与自制啤酒一起安装的,但我不确定。


如果是通过自制安装的,请尝试(从brew info postgresql安装)

1
2
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

这将重新加载它。postgres.app my default将找不到您的数据库(您需要将其指向PGDATA目录),并且您可能会遇到版本冲突(如果运行9.2和postgres.app的位置是9.3,则需要进行转储/还原)。

从评论中提取。

好吧,看来你已经安装了9.2.3,我要做的就是这个。

1
postgres -D /usr/local/var/postgres

然后全部备份。pg_dumpall > ~/mydatabases.dump

杀死邮政

一个brew reinstall postgresql,但警告你,这会把你从9.2.3带到9.3.1。然后重新导入所有数据库psql < mydatabaes.dump。确保遵循launchctl文件的卸载/加载说明,在这一点上,您应该是好的。您还可以查看使用postgres.app并将数据库导入该应用程序,但无论如何您都需要备份/转储数据库。


有同样的问题。发现升级很难杀死进程,留下了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

要通过自制安装,请确保执行brew update以使自制重新工作。


尝试将此添加到.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无法连接


如果您在从约塞米蒂升级后找到了这个页面,那么需要另一种方法来解决这个问题。从本质上讲,升级到约塞米蒂会破坏一些文件。您可以在这里找到问题和解决方案!.


安装PostgreSQL后,使用homebrew安装OS X Mavericks,这对我很有用:

1
sudo ARCHFLAGS="-arch x86_64" gem install pg

如果不是这样的话,那么在我的情况下,这个命令修复了这个问题,因为它在OS升级到OS X YosemiteOS X El Capitan之后再次出现。

1
sudo PATH=$PATH:/Applications/Postgres.app/Contents/Versions/[Version-Number]/bin gem install pg -v [gem version]

另外,请确保您已经为Xcode更新了Xcodecommand line tools


如果使用自制升级,问题可能在于数据库格式。直接运行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。它会告诉你的。