为什么在将其作为服务运行时无法访问postgres?

时间:2017-08-11 14:37:46

标签: macos postgresql psql

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

  

psql:无法连接到服务器:没有这样的文件或目录   服务器在本地运行并接受Unix域上的连接   socket“/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后,postgres.log中的/usr/local/var/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.

2 个答案:

答案 0 :(得分:3)

服务定义仍在指定旧的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。

答案 1 :(得分:3)

如果要将9.5数据用于9.6服务器。你必须跑:

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

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

在运行pg_upgrade之前,制作一份data_directory的冷复制品