Homebrew 安装 PostgreSQL 无法连接,数据库文件与服务器不兼容

wor*_*joe 10 postgresql psql mac-os-x

这是我今天尝试使用以下命令登录到我的 localhost PosgreSQL 数据库时收到的错误消息psql

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"?
Run Code Online (Sandbox Code Playgroud)

我使用 Homebrew 安装了 PostgreSQL,今天早上我使用该实用程序卸载并重新安装了 PostgreSQL,没有观察到任何变化。该psql客户端工作正常,我仍然可以使用它来连接到网络上的数据库。我一两个月只连接到我的本地数据库一次,之前它运行良好,所以我假设这是由于一些自动更新,但我不知道是哪个。Mac OS 最近将自身升级到 High Sierra (10.13)。

2014 年这里出现了相同的错误消息(链接),但这是一个人在启动服务器时遇到问题的情况。就我而言,我相信它正在运行——我已经使用过brew services start postgresql,是的,我今天重新启动了几次。但是,错误中提到的文件 ,/tmp/.s.PGSQL.5432在我的系统上不存在。我认为这是一些配置错误的情况。任何人都知道如何解决?

更新:我尝试手动启动服务器(按照 Evan 的建议),我认为我取得了突破。这是我尝试手动启动时遇到的错误:

FATAL: database files are incompatible with server
DETAIL: The data directory was initialized by PostgreSQL version 9.6, which is not compatible with this version 10.1.
Run Code Online (Sandbox Code Playgroud)

更新 2:最终我通过替换我的数据目录并使用空数据库重新初始化它来解决这个问题,使用initdb标记为“正确”的答案。公平地说,所有三个答案都有帮助。我无法将数据库从旧版本更新到新版本,因为我不再拥有旧版本 Postgres 的二进制文件。

Eva*_*oll 18

如果您没有任何数据,那么 Brew 似乎有问题。您是否运行了brew升级,StackOverflow 上两个答案可以解决这个问题,我已将它们合并在一起以尝试两全其美。

  1. 备份

    launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
    sudo mv /usr/local/var/postgres /usr/local/var/.postgres_bak;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 确保您拥有最新版本

    brew update
    brew upgrade postgresql
    
    Run Code Online (Sandbox Code Playgroud)
  3. 要么,要么重新初始化要么尝试升级您的数据目录

    1. Nuke it(从头开始,保留旧备份)

      initdb /usr/local/var/postgres -E utf8
      
      Run Code Online (Sandbox Code Playgroud)
    2. 尝试升级它

      pg_upgrade -b /usr/local/Cellar/postgresql/$myOldVersion/bin/ -B /usr/local/Cellar/postgresql/$myNewVersion/bin -d /usr/local/var/.postgres_bak -D /usr/local/var/postgres
      
      Run Code Online (Sandbox Code Playgroud)
  4. 重启服务器。

    brew services start postgresql
    
    Run Code Online (Sandbox Code Playgroud)
  5. 删除备份,如果服务器重新启动并且一切正常,则删除备份

    sudo rm -rf /usr/local/var/.postgres_bak
    
    Run Code Online (Sandbox Code Playgroud)

  • 你在 `/usr/local/bar/.postgres_bak;` 中有一个错字。应该是`/usr/local/var/.postgres_bak;`。我对 SO 验证要求我编辑 6 个以上的字符感到非常恼火,所以我不会尝试解决它并发表评论 (3认同)