1

在我安装 Mavericks 之后,我的 postgres 配置似乎完全一团糟。我从 xcode 安装了 Maverick 的开发工具,并尝试将 host:localhost 放在 db yml 中,但如果我尝试运行 rails s:

could not connect to server: No such file or directory (PGError)
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

如果我尝试手动启动 postgres:

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

我得到:server starting

pg_ctl -D /usr/local/var/postgres status返回pg_ctl: no server running??

我试图重新安装 pg gem 并重新加载 postgresql 但无济于事。brew info postgres返回:

postgresql: stable 9.3.1
http://www.postgresql.org/
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.3.1 (2919 files, 39M) *

因为我确实 brew reinstall postgress 我知道得到这个:

The data directory was initialized by PostgreSQL version 9.2, 
which is not compatible with this version 9.3.1.

我有一个 postgres 查询工具,连接似乎没有任何问题,所以我知道数据仍然存在。

如果有人能帮我解决这个问题,我将不胜感激,谢谢。

4

2 回答 2

8

该错误The data directory was initialized by PostgreSQL version 9.2, which is not compatible with this version 9.3.1.是由 和 之间的数据目录不兼容引起9.29.3

如果您不需要数据库中的旧数据9.2则很容易解决此问题:

rm -rf /usr/local/var/postgres

/usr/local/var/postgres默认数据目录路径在哪里。您可能需要根据您的设置更改路径。

删除旧数据目录后,使用以下命令初始化一个新目录9.3

initdb /usr/local/var/postgres -E utf8

那你就可以走了!

====

如果您需要将旧数据迁移9.29.3

a) 重命名您的旧数据目录:

mv /usr/local/var/postgres /usr/local/var/postgres9.2 

b)初始化一个新的9.3数据库(创建一个新的数据目录):

initdb /usr/local/var/postgres -E utf8

c) 迁移:

pg_upgrade \
-b /usr/local/Cellar/postgresql/9.2.4/bin/ \
-B /usr/local/Cellar/postgresql/9.3.1/bin/ \
-d /usr/local/var/postgres9.2 \
-D /usr/local/var/postgres \
-v

-b是您的旧二进制文件,-B而是您的新二进制文件。你可以让他们通过brew info postgres

-d是重命名的旧数据目录,-D而是您刚刚创建的新数据目录step b

那么您将收到以下消息:

Creating script to analyze new cluster                      ok
Creating script to delete old cluster                       ok

Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
    analyze_new_cluster.sh

Running this script will delete the old cluster's data files:
    delete_old_cluster.sh

d) 用你的 postgres 9.3 摇滚!

于 2013-11-22T10:04:52.487 回答
3

升级 PostgreSQL的最保守方法需要:

  1. 使用 9.2.X 源代码编译 PostgreSQL 版本(例如./configure --prefix=/tmp/myPg-9.2 && make && make install
  2. 使用 9.2 二进制文件启动数据库(例如/tmp/myPg-9.2/bin/postgres -D /usr/local/var/postgres,这将使 PostgreSQL 在此终端的前台保持)
  3. 使用转储数据库pg_dumpall
  4. 关闭 9.2 数据库。
  5. 移动/usr/local/var/postgres到安全的地方(例如/usr/local/var/postgres-9.2
  6. initdb使用新的 9.3 二进制文件的新数据库。
  7. 从 加载转储pg_dumpall

确保您保留旧的 9.2 数据目录的副本,直到您成功恢复。一旦你确定你已经完全从这种情况中恢复过来,你就可以把你的 temp 9.2 安装/tmp/myPg-9.2和旧的 9.2 数据目录吹走/usr/local/var/postgres-9.2。我会备份/usr/local/var/postgres-9.2并会在上面坐几个月“以防万一”(例如tar cjpf /usr/local/var/postgres-9.2-2013-10-31.tar.bz2 /usr/local/var/postgres-9.2)。


根据评论,添加一些额外的步骤:

  1. 编译一个 PostgreSQL 版本:
    1. cd /tmp
    2. 从http://www.postgresql.org/ftp/source/.bz2下载PostgreSQL 的 9.2 源代码的最新tarball (截至 2013 年 10 月 31 日为 9.2.5)。
    3. tar xjpf postgresql-9.2.5.tar.bz2
    4. cd postgresql-9.2.5
    5. ./configure --prefix=/tmp/myPg-9.2- 不要运行这个root
    6. make- 也不要运行这个root
    7. make install- 通常您会以 root 身份执行此操作,但这次您不需要这样做,因为您正在安装到/tmp您有权安装的位置。如果您的前缀是/usr/local,则必须将此命令作为root.
于 2013-11-01T05:24:52.813 回答