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

brvekthn  于 2023-02-22  发布在  PostgreSQL
关注(0)|答案(9)|浏览(422)

我重新启动了我的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有用吗?

8hhllhi2

8hhllhi21#

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

chmod 1777 /tmp
e0uiprwp

e0uiprwp2#

正常情况下,PostgreSQL会在正确终止时删除锁定文件。
这可能是由于另一个PostgreSQL示例以不同的用户运行,该示例被异常终止(postmaster的kill -9)。
因此,如果您确定没有Postgres进程正在运行,则可以删除该文件而不会出现任何问题,还应该使用ipcs命令检查是否存在过时的共享内存段,如果存在,则使用ipcrm删除它。
也许同时解决所有这些问题的最好方法是重新启动服务器。
注:切勿kill -9任何PostgreSQL进程。

yebdmbv4

yebdmbv43#

看起来您可能有另一个PostgreSQL示例以不同用户的身份在同一端口上运行,或者您之前以不同用户的身份启动了此PostgreSQL示例,然后不干净地将其停止。
检查/tmp/.s.PGSQL.5432.lock的所有权:

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

它是否与您运行PostgreSQL的用户身份匹配?
删除/tmp/中的锁文件是相对无害的。(永远不要删除postmaster.pid中的锁文件)。如果另一个PostgreSQL示例仍在运行,您将无法通过unix套接字连接到它,或者您可能会得到一个关于无法绑定到tcp上的端口5432的错误。
我同意@mnencia的观点,如果服务器重启简单实用,它是最好的选择。

webghufk

webghufk4#

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

$ 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
rm5edbpk

rm5edbpk5#

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

x33g5p2x

x33g5p2x6#

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

b4wnujal

b4wnujal7#

谢谢。我正试着在我的mac上安装postgres。我收到了致命的:无法打开锁定文件"/tmp/.s.PGSQL.5432.lock ":权限被拒绝
删除/tmp/.s.PGSQL.5432.lock文件后,服务器开始工作。

bf1o4zei

bf1o4zei8#

是的,我遇到了同样的问题,我通过运行以下命令修复了该问题$ sudo rm /tmp/.s.PGSQL.5432.lock$ sudo rm /tmp/.s.PGSQL.5432$ pg_ctl -D /usr/local/var/postgres start
我终止了在端口5432上运行的Postgress服务,这是你永远不应该做的事情,这可以在不知不觉中完成。所以运行上面的命令将删除锁定文件,现在当你启动一个新的Postgres服务器时,它将为你创建一个新的进程

ycggw6v2

ycggw6v29#

不确定,但我认为这是另一个Postgres示例正在处理的锁定文件。
重新启动PC,然后那个示例将离开对那个锁文件的访问。然后Postgres服务器将启动。它对我很有效。

相关问题