我最近使用Homebrew在我的Mac上安装了PostGIS(El Capitan 10.11.4,Postgres版本9.5.1(,我正在按照这些说明进行操作 - http://morphocode.com/how-to-install-postgis-on-mac-os-x/
当我尝试使用
pg_ctl -D /usr/local/var/postgres start
我收到以下错误:
$ FATAL: lock file "postmaster.pid" already exists
HINT: Is another postmaster (PID 280) running in data directory "/usr/local/var/postgres"?
所以我花了几个小时研究如何解决这个问题,但无济于事。
值得注意的是,我试图按照超级用户 - https://superuser.com/questions/553045/fatal-lock-file-postmaster-pid-already-exists- 的答案中的建议杀死 PID(在上面的情况下,我运行了 kill 208
(,但是当我尝试再次启动 Postgres 时,我得到了同样的错误,尽管 PID 编号不同。 我看到一些人建议删除 postmaster.pid 文件,但我觉得也许我应该将其保存为最后的手段......
诚然,我不确定如何解决这个问题的部分原因是我不太清楚邮政局长是什么 - 我刚刚开始了解所有这些。
通过 psql db_name
命令跳入 Postgres 数据库工作得很好,值得一提。
发布此内容以防对其他人有帮助:
当我的笔记本电脑崩溃时,我在硬重启后遇到了与 OP 相同的问题。对我有帮助的是运行以下命令以查看 PID 与 postmaster.pid 相关联的内容:
cat /usr/local/var/postgres/postmaster.pid
出现的第一个数字将是 PID。在活动监视器中查看,我能够看到Postgres正在运行,但没有与显示的PID编号匹配的PID编号。
我没有按照超级用户上引用的答案中概述的步骤,而是正确重新启动了笔记本电脑,然后打开了终端并运行
brew services restart postgresql
这无需删除 postmaster.pid,我看到其他一些帖子推荐。有时,简单的解决方案是有效的。
经过长时间的搜索,我在这里添加对我有用的东西:
-
删除
postmaster.pid
文件:rm /usr/local/var/postgres/postmaster.pid
-
重新启动您的帖子:
brew services restart postgresql
希望这对某人有所帮助...
更新 8/2022:
正如Mike评论的那样,对于M1 Mac,您可以将阶段1替换为:
rm /opt/homebrew/var/postgresql/postmaster.pid
使用 M1 并指定 Postgres 版本 @ 14
rm -rf /opt/homebrew/var/postgresql@14/postmaster.pid
当我的系统意外关闭时,它经常发生在 OSx 中
。您只需删除文件postmaster.pid
即可。
cd Library/Application Support/Postgres/var-{postgres-version}
并删除 postmaster.pid 文件
如果您使用brew
那么您的路径应该是这样的:
/usr/local/var/postgres/postmaster.pid
使用此命令重新启动 Postgres
pg_ctl -D /usr/local/var/postgres restart
由于您可以连接到数据库,因此无需再次启动服务器 - 它已经在运行。
pg_ctl
用于控制PostgreSQL服务器。由于您的服务器已经启动,因此您的命令:
pg_ctl -D /usr/local/var/postgres start
返回一个错误,指出postmaster.pid
上有一个锁定 - 这是真的,因为已经有一个服务器在该 PID 下运行。
有两种方法:
- 最基本的方法 - 跳过该步骤,您的服务器已经在运行!
- 执行不必要的操作 - 停止服务器,然后重新启动它。
您可以停止您的服务器执行以下操作:
pg_ctl -D /usr/local/var/postgres stop
这样您就不会再锁定邮局局长,您可以使用您的命令重新启动它。
Postmaster是PostgreSQL的主要进程。你正在尝试启动已经在运行的PostgreSQL(你说你自己可以连接到它(。只需跳过该过程的该步骤即可。
当系统意外关闭时,我的帖子崩溃,我无法连接到它。
对我有用的是:
1° 检查帖子日志:
tail -n 10000 /usr/local/var/log/postgres.log
2° 找到后行的 PID,应如下所示:
FATAL: lock file "postmaster.pid" already exists
HINT: Is another postmaster (PID 707) running in data directory "/usr/local/var/postgres"?
3° 杀死该进程:
kill 707
4° 重新开始你的帖子
brew services restart postgresql
完成这些步骤后,我能够连接到我的rails应用程序中的数据库。
如果您没有重要数据要丢失:
sudo killAll postgres
brew services restart postgresql
再次:这样做可能会损坏数据!
风险自负!
我正在使用 mac,这些步骤对我有用:-
步骤1:CD库/应用程序\支持/帖子(最常见的是您的Postgres安装将位于此处(
第 2 步:光盘 VAR-13(如果您使用的是版本 12,请使用 CD var-12。希望明白了(
第 3 步:LS(正如您在文件中所看到的,您会发现postmaster.pid,完美。
第 4 步:RM 邮政局长.pid
删除过时的postmaster.pid文件后,您可以重新启动PostgreSQL,一切应该正常。
我的OSX笔记本电脑意外关闭,我在PostgresApp中收到过时的postmaster.pid错误。关闭我的笔记本电脑并再次打开它解决了这个问题。
运行以下命令后
rm /usr/local/var/postgres/postmaster.pid
brew services restart postgresql
错误lock file "postmaster.pid" already exists
再次出现。
当我们运行launchctl list | grep postgres
28618 0 homebrew.mxcl.postgresql
现有文件 "postmaster.pid" 是由 launchctl
托管的守护进程创建的。
我们试图阻止homebrew.mxcl.postgresql
通过
sudo launchctl stop homebrew.mxcl.postgresql
launchctl disable homebrew.mxcl.postgresql
不幸的是,他们都无法阻止homebrew.mxcl.postgresql
.
原因Disable and enable an agent using (persists between boots)
https://apple.stackexchange.com/questions/105892/disable-services-in-osx-services-msc
launchctl enable <name> or launchctl disable <name>
当错误lock file "postmaster.pid" already exists
再次出现时解决它的两种方法
- 为了立即停止代理
launchctl kill homebrew.mxcl.postgresql
- 重新启动桌面并运行
brew services start postgresql@14
。现在,PostgreSQL可以成功启动了。
希望它可以帮助再次遇到相同问题的人。
我有用。首先找到postmaster.pid(对我来说,它在var目录中,如下所示,尽管根据您的操作系统会有所不同(。然后摆脱postmaster.pid,然后杀死postgres进程,然后启动/重新启动postgres服务。
cd /var/lib/pgsql/data/
rm postmaster.pid
sudo pkill -u postgres
sudo systemctl start postgresql.service
我尝试了这里列出的所有内容,但没有一个有效(M1 Mac,postgres@14(。
我不得不在/opt/homebrew/var/postgres
时核弹Postgres目录,然后用brew重新安装。
如果您已经安装了带有brew的postgres,那么只需运行以下命令,它将管理所有内容
brew services restart postgresql