无法启动 Postgres 服务器,因为锁定文件的权限被拒绝

问题描述 投票:0回答:9

我重新启动了我的 Postgres 服务器,但现在。 我检查了我的“pgstartup.log”日志文件。这说:

creating system views ... ok
loading system objects' descriptions ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok

Success. You can now start the database server using:
/usr/bin/postgres -D /var/lib/pgsql/data
/usr/bin/pg_ctl -D /var/lib/pgsql/data -l logfile start

FATAL:  could not open lock file "/tmp/.s.PGSQL.5432.lock": Permission denied
FATAL:  could not open lock file "/tmp/.s.PGSQL.5432.lock": Permission denied

你认为删除

/tmp/.s.PGSQL.5432.lock
会有效吗?

postgresql
9个回答
8
投票

Postgres 无法将文件写入 /tmp,因为在 /tmp 目录上设置了权限。 作为 root 用户在终端执行:

chmod 1777 /tmp

6
投票

PostgreSQL 通常会在正确终止时删除锁定文件。

这可能是由于另一个以不同用户运行的 PostgreSQL 实例异常终止(对 postmaster 执行 kill -9)。

所以,如果您确定没有 Postgres 进程在运行,您可以毫无问题地删除该文件。您还应该使用

ipcs
命令检查是否有任何陈旧的共享内存段,在这种情况下使用
ipcrm
删除它。

一次解决所有这些问题的最佳方法可能是重新启动服务器。

P.S.:从来没有

kill -9
任何PostgreSQL进程。


3
投票

看起来你可能有另一个 PostgreSQL 实例作为不同的用户在同一端口上运行,或者你之前以不同的用户身份启动了这个 PostgreSQL 实例然后不干净地停止了它。

检查

/tmp/.s.PGSQL.5432.lock
的所有权:

ls -l /tmp/.s.PGSQL.5432.lock

它与您运行 PostgreSQL 的用户匹配吗?

删除

/tmp/
中的锁文件相对无害。 (从来没有,ever删除
postmaster.pid
锁文件)。如果另一个 PostgreSQL 实例仍在运行,您将无法通过 unix 套接字连接到它,或者您可能会收到无法绑定到 tcp 端口 5432 的错误。

我同意@mnencia 的观点,如果简单实用,服务器重启是最好的选择。


3
投票

如果您知道没有其他 Postgres 进程正在运行,请删除这 2 个文件并重试:

$ sudo rm /tmp/.s.PGSQL.5432.lock
$ sudo rm /tmp/.s.PGSQL.5432

然后,您可以使用以下命令将服务器作为后台进程运行:

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

如果您使用的是 OS X,请将别名放入 .bash_profile 中,如下所示:

alias pgb='pg_ctl -D /usr/local/var/postgres start'

现在,使用命令获取它:

$ source ~/.bash_profile

Postgres 服务器将使用以下命令运行:

$ pgb

1
投票

对我来说这是数据库文件的权限问题,它是组/世界可读的。那是错误的!数据库文件应为 0700。Aft


0
投票

感谢您的建议。 首先我尝试更改锁定文件的权限但它没有用 后来我删除了解决我问题的锁定文件。

谢谢


0
投票

谢谢。 我试图在我的 mac 上安装 postgres。我收到了 致命:无法打开锁定文件“/tmp/.s.PGSQL.5432.lock”:权限被拒绝

删除/tmp/.s.PGSQL.5432.lock文件后,服务器开始工作了


0
投票

是的,我有同样的问题,我通过运行这个命令修复了它

$ sudo rm /tmp/.s.PGSQL.5432.lock
$ sudo rm /tmp/.s.PGSQL.5432
$ pg_ctl -D /usr/local/var/postgres start

我杀死了在端口 5432 上运行的 Postgress 服务,这是你永远不应该做的事情,这可以在不知不觉中完成。所以运行上面的命令会删除锁定文件,现在当你启动一个新的 Postgres 服务器时,它会为你创建一个新进程


0
投票

不确定,但我认为这是另一个 Postgres 实例正在处理的锁定文件。

重新启动 PC,然后该实例将保留对该锁定文件的访问权限。 Postgres 服务器将启动。它对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.