如何通过命令行停止Postgres.app集群?kill操作会致菜单状态异常吗?
嘿,我平时折腾Postgres.app的时候经常用命令行操作,给你把这几个问题说清楚:
1. 命令行停止Postgres.app的默认集群
Postgres.app自带了官方的pg_ctl工具,只要你是默认安装并配置了环境变量(比如启动Postgres.app时提示的添加PATH的步骤),直接用这个工具就能安全停止集群。
默认集群的数据目录一般在~/Library/Application Support/Postgres/var-[版本号],比如Postgres 15就是var-15,执行以下命令即可停止:
pg_ctl stop -D ~/Library/Application\ Support/Postgres/var-15
要是你记不清版本号,也可以通过端口来操作(默认集群端口是5432):
pg_ctl stop -o "-p 5432"
2. 停止特定的Postgres.app集群
如果你创建了多个自定义集群,最稳妥的方式是指定它的专属数据目录。你可以打开Postgres.app的偏好设置,在「Clusters」标签里找到对应集群的「Data Directory」路径,然后用pg_ctl指定这个路径停止:
pg_ctl stop -D /path/to/your/custom/cluster/data
另外,每个集群的端口都是唯一的,也可以通过端口来定位停止:
pg_ctl stop -o "-p 5433" # 替换成目标集群的端口
3. 使用kill命令停止集群的影响
直接用kill或者killall postgres强制终止进程的话,非常不推荐——首先Postgres没有机会完成正常的关闭流程(比如刷写缓存到磁盘、优雅断开连接),有极小概率导致数据损坏;其次Postgres.app的菜单栏确实会显示错误状态,它会识别到集群是意外终止的,可能显示「Stopped」带警告标记,或者直接显示「Error」,需要你手动重启或者刷新状态才能恢复正常显示。
内容的提问来源于stack exchange,提问作者american-ninja-warrior
相关产品推荐
相关产品推荐

