如何在 Mac 上卸载 Postgres.app
Postgres.app 在你的 Mac 上跑 PostgreSQL 服务器,每个服务器的数据库都放在一个数据目录里,默认位于 ~/Library/Application Support/Postgres,每个 PostgreSQL 大版本一个 var-XX 文件夹。移除应用不会动它们,删掉这个文件夹就是把里面所有数据库一起删掉,所以动手之前先用 pg_dump 把要留的数据备份出来。下面覆盖从 postgresapp.com 下载的 Postgres.app 和 Homebrew cask postgres-app 两种安装方式,用 Homebrew formula、MacPorts 或 EnterpriseDB 安装器装的 PostgreSQL 是另一套安装,不在这里。
先备份数据库
Postgres.app 的文档要求卸载前先用 pg_dump 备份数据。命令行工具装在应用里面,所以备份要趁 Postgres.app 还在、装着这个数据库的服务器还在运行时做,把下面两处 DBNAME 都换成数据库名:
/Applications/Postgres.app/Contents/Versions/latest/bin/pg_dump DBNAME > DBNAME.sql
导出的文件写在终端当前所在的文件夹,要留几个数据库就跑几次,确认 pg_dump 成功结束、没有报错,导出文件放在待删除的数据目录以外,文件非空不能证明备份完整,删除原件前,把每份导出恢复到独立的临时数据库,核对需要的表和记录,PostgreSQL 备份文档说明了恢复方法,以及逐库导出时还要单独备份的角色和表空间。
打算以后重装 Postgres.app 的话,也可以让数据目录原地留着,下面的卸载步骤里删除它本来就是可选的。
退出 Postgres.app,移除应用
删除任何数据目录前,先退出 Postgres.app,在「活动监视器」检查 postgres、postmaster 和 PostgresMenuHelper,核对进程的可执行文件和数据目录,避免停掉另一套 PostgreSQL,确认使用待删除目录的 Postgres.app 服务器已经停止,这次测试里主程序退出后,菜单栏助手还在运行。
Postgres.app 的安装与卸载页面给的步骤是这样:
- 退出 Postgres.app,菜单栏有它的图标就从那里退出,再把它从「应用程序」拖进废纸篓。
- 可选:删掉数据目录,默认在
~/Library/Application Support/Postgres,只在做完上面的备份、或者确定里面的数据库都不要了之后再删。 - 可选:用
defaults delete com.postgresapp.Postgres2删掉 Postgres.app 的偏好设置。 - 如果你把命令行工具加进过
$PATH,可选用sudo rm /etc/paths.d/postgresapp去掉这项设置,先用下一节里的ls那一行确认,文件不存在就跳过这一步。
测试时 Postgres.app 首次启动注册了一个登录助手 com.postgresapp.Postgres2LoginHelper,应用移除后它也跟着消失了,要是「系统设置 › 通用 › 登录项与扩展」里还有 Postgres 的条目,在这里关掉。
Postgres.app 的文件在哪里
| 位置 | 里面是什么 | 怎么处理 |
|---|---|---|
~/Library/Application Support/Postgres |
数据目录,每个大版本一个 var-XX 文件夹,也就是你的数据库 |
先备份,确定里面的数据库都不要了再删 |
~/Library/Preferences/com.postgresapp.Postgres2.plist |
应用偏好设置 | 随应用移除 |
~/Library/Caches/com.postgresapp.Postgres2、~/Library/Cookies/com.postgresapp.Postgres2.binarycookies |
缓存和 Cookie | 随应用移除 |
/etc/paths.d/postgresapp |
把命令行工具加进 $PATH,只有你设置过才有 |
应用移除后再删 |
这是默认的数据位置,你让某个服务器用了别的文件夹的话,它的数据就在那个文件夹里。数据目录和 $PATH 的位置来自 Postgres.app 的文档,缓存和 Cookie 来自 Homebrew cask 的 zap 清单。
表中的用户数据路径可以在访达按 Shift + Command + G 逐项打开,完成备份和服务器停止检查后,再把不需要的 Postgres.app 数据移进废纸篓。
检查结果
在「终端」里运行下面几条只读命令:
pgrep -il postgres
launchctl list | grep -i postgresapp
ls "$HOME/Library/Application Support/Postgres"
ls -l /etc/paths.d/postgresapp
pgrep没有输出,说明没有名字带 postgres 的进程在跑,列出postgres进程说明还有服务器开着,可能来自 Postgres.app,也可能来自另一套 PostgreSQL,列出PostgresMenuHelper说明菜单栏助手还开着,删数据之前先把它们退出。launchctl只筛选当前用户名字含postgresapp的任务,没有匹配不排除另一种注册方式,Postgres.app 条目还要到「登录项与扩展」核对,出现com.postgresapp.Postgres2LoginHelper时先辨认再关闭。- 对 Postgres 文件夹运行
ls会列出还在的var-XX数据目录,你留着数据库时这是正常结果,提示「No such file or directory」说明文件夹已经不在。 ls -l /etc/paths.d/postgresapp打印出文件,说明$PATH设置还在,提示「No such file or directory」说明从没加过或者已经删掉。
用 Homebrew 安装时
postgres-app 这个 cask 卸载时会卸下登录助手 com.postgresapp.Postgres2LoginHelper,并退出 Postgres.app 和它的菜单栏助手。它的 zap 清单包括装着你数据库的 ~/Library/Application Support/Postgres,还有缓存、Cookie 和偏好设置,自己运行 brew uninstall --cask --zap postgres-app 会把数据目录移进废纸篓,不看你在 Mole 里勾了什么。Homebrew 的 Postgres.app cask
想保留数据库,先备份,或者卸载时不执行 zap:
brew uninstall --cask postgres-app
只有 zap 清单里的每一项都在你自己的 ~/Library 里、没有碰到你没勾的行、也没有被其他已装应用认领时,Mole 才会加上 --zap。「卸载时一并移除数据和配置」关闭时,~/Library/Application Support/Postgres 不勾选,打开后,通过应用数据检查的文件夹可以勾选,要留数据库时取消这一项并核对最终清单,删除目标中有未勾选项就不会运行 --zap。
Mole 会列出什么
用 Mole 卸载 Postgres.app 时:
~/Library/Application Support/Postgres列出供确认,「卸载时一并移除数据和配置」关闭时不勾选,打开后,符合条件的应用数据可以勾选,包括这个数据库目录,先备份,要留数据库时取消勾选。com.postgresapp.Postgres2偏好设置文件,以及应用和它的菜单栏助手com.postgresapp.Postgres2MenuHelper在用户临时目录里的缓存,默认勾选。/etc/paths.d/postgresapp不会列出。- 你用
brew services跑的 PostgreSQL,它的启动任务不会被列出,也不会被卸下,哪怕名字里同样带着 postgres。
这次检查覆盖了什么
2026 年 9 月 25 日,从官方发布页下载 Postgres.app 2.9.6,校验和与 Homebrew cask 一致,拷进「应用程序」后打开一次,没有初始化数据库,再用 Mole 的开发构建卸载,列出的行全部勾上。1.84 GB 的应用、空的 ~/Library/Application Support/Postgres、偏好设置文件和一个临时缓存进了废纸篓,登录助手之后也不在了。随后重新扫描,发现菜单栏助手的临时缓存还在磁盘上,当天 Mole 改成会列出这个助手的文件,第二次卸载把它移走了。测试时没有建数据库,所以说明不了数据会被保留还是移走,$PATH 设置和 Homebrew cask 都没有测试。
