在Mac上通过终端停止postgreSQL服务

33

目前正在运行 postgreSQL 9.4.5_2

我已经尝试过

pg_ctl stop -W -t 1 -s -D /usr/local/var/postgres -m f

通常没有消息就是好消息,但在我运行之后

pg_ctl status -D /usr/local/var/postgres 

并且得到了pg_ctl: 服务器正在运行 (PID: 536)

我也尝试过

pg_ctl restart -w -D /usr/local/var/postgres -c -m i

响应消息如下:

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

我也检查了我的 /Library/LaunchDaemons/,想知道为什么服务在登录时启动,但迄今为止没有任何进展。有人有任何关于我应该在哪里检查的想法吗?在活动监视器中强制停止也没有帮助我。
9个回答

44

遗憾的是之前的回答都没有帮助到我,以下方法对我有效:

brew services stop postgresql

干杯


可能需要指定版本:brew services stop postgresql@15 - undefined

22

使用以下命令重新启动

sudo -u postgres pg_ctl -D /Library/PostgreSQL/11/data stop

8
很好,但需要注意的是- 您的命令假设您与pg_ctl二进制文件在同一个目录中。通常,您通过安装过程将Postgres放入计算机后,该二进制文件位于您路径中的某个目录中。因此,更普遍适用的可能是 sudo -u postgres pg_ctl -D /Library/PostgreSQL/11/data stop. - Yu Chen
3
好的解决方案。但不要使用 ./pg_ctl,请使用 pg_ctl - Allen Haley
2
如果您的路径位于用户目录(例如在〜/中),则由于权限问题,它将无法正常工作。运行cd /以避免文件权限问题,因为当您切换到没有访问您的用户主目录的postgres用户时,它将无法访问该目录。 - Ben Butterworth

19

13

我曾遇到同样的问题,我在本地安装了PostgreSQL并希望将其封装在Docker容器中。

我通过以下方式解决这个问题:

  1. 卸载PostgreSQL。
  2. 结束占用PostgreSQL端口的进程。如果你不卸载该进程,它会重新启动并再次占用该端口。请查看你的Brewfile文件,使用brew bundle dump命令,并检查是否有restart_service: true标志。

我认为,因为我正在使用容器化技术,所以不需要本地的PostgreSQL,但注意这将从您的系统中删除PostgreSQL

brew uninstall postgres
...
lsof -i :5432 # this to find the PID for the process
kill - 9 <the PID you found at previous command> 

注意:如果你仍然想使用 psql,你可以通过 brew install libpq 安装它,并将 psql 添加到你的 PATH(命令输出会告诉你应该添加到.zshrc或类似文件中)。

8
您可以使用此命令停止服务器。
{pg_ctl -D /usr/local/var/postgres stop -s -m fast}

pg_ctl不在我的路径上。它通常安装在哪里? - jschmitter

3

我刚在OS X Ventura上安装了Postgres 15,但也不知道如何停止它。以下方法可行:

sudo -u postgres /Library/PostgreSQL/15/bin/pg_ctl -D /Library/PostgreSQL/15/data stop

2
另一个可能的情况是通过UI安装了PostgreSQL,查找进程的命令是:
netstat -vanp tcp | grep 5432

然后你杀死PID

kill -9 PID_FROM_netstat

1
几乎任何受管理的进程都会在你手动终止进程后自动重启。 - duhaime

2

在已经提出的解决方案上添加:

如果您决定使用 pg_ctl 命令,请确保您正在以具有访问数据库/数据库服务器权限的用户身份执行该命令。

这意味着:

  • 您终端上当前登录的用户应该拥有这些权限

或者

  • 首先运行:
$ sudo su <name_of_database_user>

pg_ctl -D /Library/PostgreSQL/<version_here>/data/ stop

对于“start”命令也是一样。

致谢:https://gist.github.com/kingbin/9435292 (在GitHub上托管了一个包含命令的文件,为我节省了一些时间:^))


2

我有一个偶然运行的 Docker 容器,里面安装了 Postgres 数据库,但我已经忘记了它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接