【问题标题】:PostgreSQL server won't stopPostgreSQL 服务器不会停止
【发布时间】:2013-07-29 14:31:00
【问题描述】:

在 Mac OS X 10.8.4 上使用 PostgreSQL 有点问题。我在 postgres 服务器运行时不小心做了brew rm postgresql --force。当我使用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 fastpg_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.log 的要点:https://gist.github.com/anonymous/6106182

【问题讨论】:

  • pg_ctl -D /usr/local/var/postgres stop -m immediate 是否比其他两次尝试更进一步?
  • 这与运行pg_ctl -D /usr/local/var/postgres stop -mi 相同,是的,我得到的只是“服务器没有关闭”
  • 我猜到了,但快速浏览postgres --help 并没有立即显示“m”标志。
  • brew reinstall postgresql stackoverflow.com/a/39781473/6086226 为我工作

标签: postgresql macos terminal


【解决方案1】:

原来我的 brew.plist for postgres 需要在 ~/Library/LaunchAgents/ 卸载和删除。重启后一切都很好......结束问题。

【讨论】:

  • 请对此进行扩展
【解决方案2】:

有同样的问题,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 问题。

按照这个思路,我发现这很有帮助 blog post,归结为以下命令为我解决了这个问题:

$ brew services list
$ brew services restart postgresql

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

更新 - 未知命令:服务

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

您可以阅读更多关于它的信息herehere(相关的 github 票证)。

经过一番挖掘,我发现this repo 在macs 上添加了services

这就是我'返回'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。没有自己检查,所以不知道它是否以及如何工作。

【讨论】:

  • 这淘汰了我多年来积累的许多 bash 别名,用于做完全相同的事情。好看!
  • @naturalc 更新了我的答案以回应您的评论。告诉我它是否适合你。
  • 为我解决了这个问题。谢谢!
  • 对于任何 Rails 用户,我试图通过通常的 Rake 命令停止 Postgres,bundle exec rake pg:stop。但这不起作用,导致pg_ctl: server does not shut down。解决方法brew services restart postgresql 对我有用。 ?
  • 谢谢,伙计!我想不出它实际上是一个正在运行的自制服务。不错!
【解决方案3】:

我遇到了类似的问题。我忘记了我几天前集成了“午餐”并且正在使用 它作为launchctl 包装器在启动时启动plist ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist。 pg_ctl 没有生效是因为下面这行代码&lt;key&gt;KeepAlive&lt;key&gt;:

      <?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

【讨论】:

  • 注意 .plist 文件的名称可能不完全相同。就我而言,它是homebrew.mxcl.postgresql92.plist。检查自己。
【解决方案4】:

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

pg_ctl stop -m immediate

pg_ctl start

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

【讨论】:

  • 我得到 pg_ctl: no database directory specified and environment variable PGDATA unset
  • 得到同样的错误:没有指定数据库目录和环境变量 PGDATA 未设置
  • @SuperUberDuper 您应该添加 -D 并指定数据库位置。例如: pg_ctl stop -m immediate -D 。 “。”代表当前目录,假设你在数据库目录中
【解决方案5】:

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

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

【讨论】:

    【解决方案6】:

    $ brew services list

    $ brew services stop postgresql

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

    【讨论】:

    • 尝试使用pg_ctl ... stop 停止但无济于事。一旦我运行了 brew services stop postgresql,我的 pg_ctl...stop 现在再次按预期工作。不知道如何,但我很高兴这解决了它!
    • 我需要添加版本。 brew services stop postgresql@10
    【解决方案7】:

    当依赖 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
    

    【讨论】:

      【解决方案8】:

      我没有通过brew services 启动postgres,所以无法阻止它。

      这行得通。

      $ 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"
      

      【讨论】:

        猜你喜欢
        • 2014-01-13
        • 1970-01-01
        • 2016-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 2021-02-27
        • 2012-03-24
        相关资源
        最近更新 更多