pg_ctl:无法打开 PID 文件“/var/lib/postgres/data/postmaster.pid”:权限被拒绝

pg_ctl:无法打开 PID 文件“/var/lib/postgres/data/postmaster.pid”:权限被拒绝

在 Arch Linux 上,运行 initdb 命令后,我收到以下消息:

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

作为 postgres 用户,我尝试使用上述命令启动并获取错误:

FATAL: could not create lock file "/run/postgresql/.s.PGSQL.5432.lock" no such file or directory

我退出到 postgres 用户并尝试通过上面的命令启动并得到:

pg_ctl: could not open PID file "/var/lib/postgres/data/postmaster.pid" : Permission denied

然后我尝试以 sudo 身份运行上述命令:

sudo pg_ctl -D /var/lib/postgres/data -l logfile start

并得到:

pg_ctl: cannot run as root.

答案1

当手动启动 postgres 时,即不使用打包的启动脚本,您需要执行脚本所做的操作:

  1. 创建/run/postgresql具有写入权限postgres 和其他人读取权限的目录。/run通常安装在 RAM 磁盘上,因此它是空的也是正常的。

  2. pg_ctl以独占用户身份运行 postgressudo -u postgres如果sudo必须使用,请使用。

您提到的第一个错误可以通过 #1 解决,其他两个错误可以通过 #2 解决。或者只需使用随操作系统软件包附带的启动脚本,它就可以处理这些细节,因此您无需学习它们。

文档位于https://wiki.archlinux.org/index.php/PostgreSQL告诉:

最后,开始使能够postgresql.service。

这意味着systemctl enable postgresql.servicesystemctl start postgresql.service相反pg_ctl [...options...] start

答案2

无论如何,我想补充一点,我刚刚在 Ubuntu 上使用 Postgresql 10 时遇到了一个与之密切相关的问题。事实上,could not open PID file “/var/lib/postgres/data/postmaster.pid”这就是我来到这里的原因。我尝试了在这里和其他地方学到的东西,但都无济于事,然后诉诸古老的重启。一切都好了。哦,好吧。我不能说我学到了很多东西,或者它教会了我很多东西,除了记得尝试重启...

相关内容