我重新启动了我的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
有用吗?
9条答案
按热度按时间8hhllhi21#
Postgres无法将文件写入/tmp,因为在/tmp目录上设置了权限。作为root用户在终端中执行:
e0uiprwp2#
正常情况下,PostgreSQL会在正确终止时删除锁定文件。
这可能是由于另一个PostgreSQL示例以不同的用户运行,该示例被异常终止(postmaster的kill -9)。
因此,如果您确定没有Postgres进程正在运行,则可以删除该文件而不会出现任何问题,还应该使用
ipcs
命令检查是否存在过时的共享内存段,如果存在,则使用ipcrm
删除它。也许同时解决所有这些问题的最好方法是重新启动服务器。
注:切勿
kill -9
任何PostgreSQL进程。yebdmbv43#
看起来您可能有另一个PostgreSQL示例以不同用户的身份在同一端口上运行,或者您之前以不同用户的身份启动了此PostgreSQL示例,然后不干净地将其停止。
检查
/tmp/.s.PGSQL.5432.lock
的所有权:它是否与您运行PostgreSQL的用户身份匹配?
删除
/tmp/
中的锁文件是相对无害的。(永远不要删除postmaster.pid
中的锁文件)。如果另一个PostgreSQL示例仍在运行,您将无法通过unix套接字连接到它,或者您可能会得到一个关于无法绑定到tcp上的端口5432的错误。我同意@mnencia的观点,如果服务器重启简单实用,它是最好的选择。
webghufk4#
如果您知道没有其他Postgres进程正在运行,请删除这两个文件,然后重试:
然后,您可以使用以下命令将服务器作为后台进程运行:
如果您使用的是OS X,请将别名放在.bash_profile中,如下所示:
现在,使用以下命令获取源代码:
Postgres服务器将使用以下命令运行:
rm5edbpk5#
对我来说,这是数据库文件的权限问题,它是组/世界可读的。这是错误的!数据库文件应该是0700。
x33g5p2x6#
感谢您的建议。首先,我尝试更改锁定文件的权限,但它不起作用。后来,我删除了锁定文件,解决了我的问题。
谢谢
b4wnujal7#
谢谢。我正试着在我的mac上安装postgres。我收到了致命的:无法打开锁定文件"/tmp/.s.PGSQL.5432.lock ":权限被拒绝
删除/tmp/.s.PGSQL.5432.lock文件后,服务器开始工作。
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服务器时,它将为你创建一个新的进程
ycggw6v29#
不确定,但我认为这是另一个Postgres示例正在处理的锁定文件。
重新启动PC,然后那个示例将离开对那个锁文件的访问。然后Postgres服务器将启动。它对我很有效。