致命错误锁定文件 "postmaster.pid" 已经存在

FATAL ERROR lock file "postmaster.pid" already exists

我最近使用 Homebrew 在我的 Mac(El Capitan 10.11.4,Postgres 版本 9.5.1)上安装了 PostGIS,我正在按照这些说明进行操作 - http://morphocode.com/how-to-install-postgis-on-mac-os-x/

当我尝试使用

启动 Postgres 时
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"?

所以我花了几个小时研究如何解决这个问题,但无济于事。

值得注意的是,我试图按照超级用户的回答中的建议终止 PID - https://superuser.com/questions/553045/fatal-lock-file-postmaster-pid-already-exists-(在上述情况下,我 运行 kill 208),但是一旦我试图再次启动 Postgres,我得到了同样的错误,尽管 PID 号不同。我看到一些人建议删除 postmaster.pid 文件,但我觉得也许我应该将其保存为最后的手段...

不可否认,我不确定如何解决这个问题的部分原因是我不太清楚邮政局长是什么 - 我才刚刚开始了解所有这些。

通过 psql db_name 命令跳转到 Postgres 数据库工作正常,物有所值。

Postmaster 是主要的 PostgreSQL 进程。您正在尝试启动已经 运行 的 PostgreSQL(并且您说自己可以连接到它)。只需跳过流程中的那一步。

既然可以连接到数据库,就不用再启动服务器了——已经运行.


pg_ctl用于控制PostgreSQL服务器。由于您的服务器已经启动,您的命令:

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

Returns 一个错误,说 postmaster.pid 上有一个锁 - 这是真的,因为在那个 PID 下已经有一个服务器 运行。


有两种方法:

  1. 最基本的方法——跳过那一步,你的服务器已经运行!
  2. 执行不必要的操作 - 停止服务器,然后重新启动它。

您可以停止您的服务器:

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

这样您就不会再锁定 postmaster,您可以使用您的命令重新启动它。

发布这个以防对其他人有帮助:

当我的笔记本电脑崩溃时,我在硬重启后遇到了与 OP 相同的问题。对我有帮助的是 运行 以下命令来查看与 postmaster.pid 关联的 PID:

cat /usr/local/var/postgres/postmaster.pid

出现的第一个数字将是 PID。查看 Activity 监视器,我能够看到 Postgres 是 运行,但没有与显示的匹配的 PID 编号。

我没有按照超级用户所引用的答案中概述的步骤,而是正确地重新启动了我的笔记本电脑,然后打开了终端和 运行

brew services restart postgresql

无需删除 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

我的 OSX 膝上型电脑意外关机,我在 PostgresApp 中收到陈旧的 postmaster.pid 错误。关闭我的笔记本电脑并再次打开它解决了问题。

如果您已经使用 brew 安装了 postgres,那么只需 运行 下面的命令,它将管理一切

 brew services restart postgresql

如果您没有要丢失的重要数据:

sudo killAll postgres
brew services restart postgresql

再次:这样做可能会损坏数据!

风险自负!

我正在使用 mac,这些步骤对我有用:-

第一步:cd Library/Application\Support/Postgres (通常您的 Postgres 安装位于此处)

第 2 步:cd var-13 (如果您使用的是版本 12,则使用 cd var-12。希望明白这一点)

第三步:ls (正如您在文件中看到的那样,您发现 postmaster.pid,完美。)

step4: rm postmaster.pid

删除陈旧的 postmaster.pid 文件后,您可以重新启动 PostgreSQL,一切都应该正常工作。

当系统意外关闭时,我的 postgres 崩溃并且我无法连接到它。

对我有用的是:

1˚ 检查 postgres 日志:

tail -n 10000 /usr/local/var/log/postgres.log

2˚ 找到postgress的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˚ 重启你的 postgres

brew services restart postgresql

完成这些步骤后,我能够在我的 rails 应用程序中连接到数据库。

经过长时间的搜索,我在这里添加对我有用的内容:

  1. 删除postmaster.pid文件:

    rm /usr/local/var/postgres/postmaster.pid

  2. 重启你的 postgres:

    brew services restart postgresql

希望这对某人有帮助...