97

Mac OS X 10.8.4 上的 PostgreSQL 有点问题。我brew rm postgresql --force在 postgres 服务器运行时不小心做了。当我安装brew install postgresql并运行时,pg_ctl -D /usr/local/var/postgres start我得到:

pg_ctl: another server might be running; trying to start server anyway
server starting
FATAL:  lock file "postmaster.pid" already exists                                                                       
HINT:  Is another postmaster (PID 752) running in data directory "/usr/local/var/postgres"?

当我运行“ps -ef | grep postgres”时,我得到:

501   752   235   0 12:42PM ??         0:00.01 /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres -r /usr/local/var/postgres/server.log
501   754   752   0 12:42PM ??         0:00.00 postgres: checkpointer process       
501   755   752   0 12:42PM ??         0:00.34 postgres: writer process       
501   756   752   0 12:42PM ??         0:00.02 postgres: wal writer process       
501   757   752   0 12:42PM ??         0:00.01 postgres: autovacuum launcher process       
501   758   752   0 12:42PM ??         0:00.01 postgres: stats collector process       
501   945   452   0 12:58PM ttys000    0:00.00 grep postgres

当我尝试停止服务器时,pg_ctl stop -D /usr/local/var/postgres -m fast或者pg_ctl -D /usr/local/var/postgres stop -mi我得到:

waiting for server to shut down........................................... Failed
pg_ctl: server does not shut down

编辑

which pg_ctl
/usr/local/bin/pg_ctl
pg_ctl --version
pg_ctl (PostgreSQL) 9.2.4

要点server.loghttps ://gist.github.com/anonymous/6106182

4

8 回答 8

181

有同样的问题,pg_ctl: server does not shut down。此外,ps auxwww | grep postgres显示没有 postgres 运行,而pg_ctl -D /usr/local/var/postgres status显示 postgres 正在运行。重新启动我的 mac 并没有帮助,我什至还重置了 SMC,但是这个 SO Q/A 让我知道接下来要寻找什么:酿造问题。

遵循这一思路,我发现了这篇有用的博客文章,归结为以下命令为我解决了这个问题:

$ brew services list
$ brew services restart postgresql

希望这会对某人有所帮助。

更新 - 未知命令:服务

在对其中一条评论(“未知命令:服务”)进行一些调查后,我发现 Homebrew 的作者决定services从存储库中删除,因为没有人愿意维护此代码。

您可以在此处此处阅读更多相关信息(相关的 github 票证)。

经过更多的挖掘,我发现了这个添加services到 Mac 上的 repo。

这就是我“返回”的方式services

~ » brew tap gapple/services
~ » brew services
usage: [sudo] brew services [--help] <command> [<formula>]

Small wrapper around `launchctl` for supported formulae, commands available:
   cleanup Get rid of stale services and unused plists
   list    List all services managed by `brew services`
   restart Gracefully restart selected service
   start   Start selected service
   stop    Stop selected service

Options, sudo and paths:

  sudo   When run as root, operates on /Library/LaunchDaemons (run at boot!)
  Run at boot:  /Library/LaunchDaemons
  Run at login: /Users/user/Library/LaunchAgents

这是另一个建议的解决方案:https ://apple.stackexchange.com/questions/150300/need-help-using-homebrew-services-command 。自己没有检查,所以不知道它是否以及如何工作。

于 2014-06-10T08:06:55.903 回答
66

$ brew services list

$ brew services stop postgresql

停止postgresql,但可能需要一段时间→成功停止postgresql(标签:homebrew.mxcl.postgresql)

于 2017-07-19T20:04:09.293 回答
13

我有一个类似的问题。几天前我忘记了我集成了“午餐”,并将其用作launchctl 包装器以~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist在启动时启动plist。由于以下代码行,pg_ctl 无效<key>KeepAlive<key>

      <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
     3 <plist version="1.0">
     4 <dict>
     5   <key>KeepAlive</key>
     6   <true/>
     7   <key>Label</key>
     8   <string>homebrew.mxcl.postgresql</string>
     9   <key>ProgramArguments</key>
    10   <array>
    11     <string>/usr/local/opt/postgresql/bin/postgres</string>
    12     <string>-D</string>
    13     <string>/usr/local/var/postgres</string>
    14     <string>-r</string>
    15     <string>/usr/local/var/postgres/server.log</string>
    16   </array>
    17   <key>RunAtLoad</key>
    18   <true/>
    19   <key>WorkingDirectory</key>
    20   <string>/usr/local</string>
    21   <key>StandardErrorPath</key>
    22   <string>/usr/local/var/postgres/server.log</string>
    23 </dict>
    24 </plist>

试图直接杀死进程没有用,因为我需要卸载 plist。

    launchctl unload homebrew.mxcl.postgresql.plist
于 2014-09-02T15:25:21.850 回答
12

我遇到了同样的问题......删除启动代理为我解决了这个问题:

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
于 2016-06-20T21:06:35.150 回答
11

我通过使用命令解决了这个错误

pg_ctl stop -m immediate

pg_ctl start

我不需要以这种方式卸载 plist。

于 2015-08-06T09:47:49.840 回答
8

事实证明,我的 brew.plist for postgres 需要在 ~/Library/LaunchAgents/ 卸载和删除。重新启动后一切都很好......结束问题。

于 2013-07-29T20:47:33.307 回答
8

当依赖 brew 安装的 PostgreSQL 时,以下命令可以将其关闭。

> brew services stop postgresql

stopping `postgresql`... (might take a while)
==> Successfully stopped `postgresql` (label: homebrew.mxcl.postgresql)

正如另一个答案中提到的那样,遍历进程列表然后杀死任何与 postgres 相关的东西都不起作用

ps aux | grep postgres
kill $PID
于 2018-01-19T20:33:50.223 回答
0

我没有postgres开始 via brew services,所以不能那样阻止它。

这行得通。

$ ps -ef | grep postgres
501   547     1   0  2:07pm ??         0:00.29 /Applications/Postgres.app/Contents/Versions/9.6/bin/postgres -D /Users/username/Library/Application Support/Postgres/var-9.6 -p 5432

使用-D上面的参数。

$ pg_ctl stop -D "/Users/username/Library/Application Support/Postgres/var-9.6"
于 2020-03-18T15:49:00.310 回答