Postgresql 致命:无法创建锁定文件 "/var/run/postgresql/.s.PGSQL.5432.lock":权限被拒绝



我尝试启动postgresql:/usr/pgsql-11/bin/pg_ctl -D appli/postgres/data/ -l logfile start但我不明白为什么我的日志文件中总是出现这个错误:

FATAL:  could not create lock file "/var/run/postgresql/.s.PGSQL.5432.lock": Permission denied

我试图更改权限,但总是被拒绝权限:

chown -R postgres:postgres /var/run/postgresql
chmod 755 /var/run/postgresql

编辑postgresql.conf并将unix_socket_directories更改回出厂默认值/tmp

或者,以操作系统用户postgres的身份启动PostgreSQL。

我遇到了同样的问题,为我做的是创建目录"postgresql";由于某种奇怪的原因,它以前并不存在,并且运行

sudo chown postgres /var/run/postgresql

之后,pgctl能够毫无问题地创建锁文件。

我遇到了一个alpinedocker图像。事实证明,他们更改了默认值:

使用/tmp作为套接字可以让每个人欺骗PostgreSQL服务器。

有两个选项:

  1. 创建/run/postgresql目录:

    mkdir /run/postgresql && chown postgres: /run/postgresql
    
  2. 更改postgresql.conf中的unix_socket_directories(unix_socket_directories = '/tmp'(。

如果从源代码安装,目录可能应该是"/tmp"。如果您是从存储库安装的,则附带的启动脚本应该为您处理权限。为什么不使用它而不是自己运行pg_ctl呢?

对于安装在wsl2上的citus postresql扩展,我创建了.sh文件来手动启动postgres:

#!/usr/bin/env bash
sudo mkdir -p /var/run/postgresql
sudo chown postgres:postgres /var/run/postgresql
sudo chmod 744 /var/run/postgresql
sudo -u nobody bash -c : && RUNAS="sudo -u postgres"
#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
cd ~/
source ~/.bashrc
pg_ctl -D citus -l citus_logfile start
_

实际上,在目录/var/run/postgresql中,只有根用户具有写入权限,并且您试图用(pg_ctl)启动服务器的命令试图生成锁定文件,以防止服务器的多个实例同时位于同一端口上。与您一起尝试该命令的用户没有write权限,因此会出现permission denied错误。

您也不能以root身份运行此命令,因为它会拒绝这样做,因此唯一可能的解决方案是在postgres.conf文件中进行更改。

postgres.conf文件中,将unix_socket_directories分配给/tmp。在/tmp目录上,其他用户也具有root以外的写入权限。

相关内容

最新更新