FATAL ERROR锁定文件" postmaster.pid"已经存在

时间:2016-04-05 20:12:10

标签: postgresql postgis

我最近使用Homebrew在我的Mac上安装了PostGIS(El Capitan 10.11.4,Postgres是9.5.1版),我按照这些说明进行操作 - 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数据库工作得很好,因为它的价值。

10 个答案:

答案 0 :(得分:19)

TL; DR :由于您可以连接到数据库,因此您无需再次启动服务器 - 它已经在运行。

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

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

返回一个错误,说postmaster.pid上有一个锁 - 这是正确的,因为已经有一个服务器在该PID下运行。

有两种方法:

  1. 最基本的方法 - 跳过该步骤,您的服务器已在运行
  2. 执行不必要的操作 - 停止服务器,然后重新启动它。
  3. 您可以停止服务器:

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

    这样你就不再拥有对postmaster的锁定,你可以使用你的命令再次启动它。

答案 1 :(得分:9)

发布此信息以防其他人:

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

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

出现的第一个数字是PID。查看Activity Monitor,我能够看到Postgres正在运行,但没有与所示的PID编号匹配的PID编号。

而不是超级用户引用的答案中列出的步骤,我正确地重新启动了我的笔记本电脑,然后打开终端并运行

brew services restart postgresql

这无需删除postmaster.pid,我看到其他一些帖子推荐。有时,它是简单的解决方案。

答案 2 :(得分:3)

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

答案 3 :(得分:3)

当我的系统意外关闭时,在OSx中经常发生这种情况。

您只需删除文件postmaster.pid

cd Library/Application Support/Postgres/var-{postgres-version}

并删除postmaster.pid文件

使用此命令重新启动Postgres

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

答案 4 :(得分:2)

我使用的是 mac,这些步骤对我有用:-

step1:cd Library/Application\Support/Postgres (最常见的是,您的 Postgres 安装将位于此处)

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

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

第四步:rm postmaster.pid

删除过时的 postmaster.pid 文件后,您可以重新启动 PostgreSQL,一切都应该正常运行。

答案 5 :(得分:2)

当系统意外关闭时,我的 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 应用程序中的数据库。

答案 6 :(得分:1)

我的OSX笔记本电脑意外关闭,并且我在PostgresApp中收到过时的postmaster.pid错误。关闭我的笔记本电脑,然后再重新打开就可以解决问题。

答案 7 :(得分:1)

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

sudo killAll postgres
brew services restart postgresql

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

风险自负!

答案 8 :(得分:0)

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

  1. 删除 /postmaster.pid 文件:

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

  1. 重启你的 postgres:

brew services restart postgresql

答案 9 :(得分:-1)

如果您在brew中安装了postgres,则只需运行以下命令,它将管理所有内容

 brew services restart postgresql