【问题标题】:Why can I not access postgres when running it as a service?为什么在将 postgres 作为服务运行时无法访问它?
【发布时间】:2018-01-20 03:04:23
【问题描述】:

当我尝试通过 web 应用访问 postgres 或使用 psql -d template1 打开 postgres shell 时,我收到错误消息。

psql: 无法连接到服务器: 没有这样的文件或目录是 服务器在本地运行并接受 Unix 域上的连接 套接字“/tmp/.s.PGSQL.5432”?

(*我已经阅读了许多关于此错误的 SO 主题,但推荐的解决方案并没有为我解决此问题)

将 postgres 作为服务启动:

brew services restart postgresql

停止postgresql...(可能需要一段时间) ==> 成功停止postgresql(标签:homebrew.mxcl.postgresql) ==> 成功启动postgresql(标签:homebrew.mxcl.postgresql)

在终端中手动运行 postgres:

我可以通过在终端窗口中运行来让一切正常工作,但我更愿意在后台运行它。

postgres -D /usr/local/var/postgres9.6.3

集群:

我在/usr/local/var 中有 3 个数据库集群,但我想使用postgres9.6.3/

postgres
postgres9.5/
postgres9.6.3/

其中:

which psql 返回/usr/local/bin/psql

路径:

echo $PATH 返回 /usr/local/bin/usr/local/var(添加)

其他推荐的解决方案:

很多人可以通过删除 /postgres/postmaster.pid 来解决此问题,但我不存在此文件。

更新

运行ps -ef | grep postgres,仅输出,

501  2135  1530   0 12:08pm ttys002    0:00.00 grep postgres

brew servies重启postgres后,/usr/local/var/log中的postgres.log包含,

FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 9.5, which is not compatible with this version 9.6.3.

【问题讨论】:

  • 通过brew services重启服务后,ps -ef | grep postgres的输出有什么显示吗?如果没有,服务器实际上并没有运行——考虑到错误,这似乎很可能。检查日志(应该在 /usr/local/var/log/postgres.log 中),看看里面是否有什么有趣的东西。
  • 添加了问题的更新

标签: macos postgresql psql


【解决方案1】:

如果您想在 9.6 服务器上使用 9.5 数据。你必须运行:

  • pg_upgrade(here) 或
  • pg_dump 从 9.5 到文件和 pg_restore | psql 取决于 9.6 上的备份类型... (here)

如果您选择第一个选项,则无需进一步的步骤 - 您的默认版本是 9.6,它将适用于现有数据目录。

在运行 pg_upgrade 之前,制作 data_directory 的冷拷贝

【讨论】:

    【解决方案2】:

    服务定义仍在指定您的旧 9.5 数据目录。如果您打开 ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist,您应该会看到如下所示的部分:

    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/opt/postgresql/bin/postgres</string>
      <string>-D</string>
      <string>/usr/local/var/postgres9.5</string>
    </array>
    

    将最后一个参数更改为指向您的 9.6.3 数据目录并重新启动服务。如果不需要,您可能需要注销并重新登录,以便它重新读取 plist。

    【讨论】:

    • 我能够打开和编辑这个文件(它显示的是旧版本)。但是如果我用brew services restart postgres 重新启动postgres,它会在我更新后恢复到旧版本。除了sudo nano...,我还需要其他方式来更新它吗
    • Homebrew 安装的默认数据目录是/usr/local/var/postgres。如果你切换目录,你应该可以不用担心升级。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多