在 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 时,即不使用打包的启动脚本,您需要执行脚本所做的操作:
创建
/run/postgresql
具有写入权限postgres
和其他人读取权限的目录。/run
通常安装在 RAM 磁盘上,因此它是空的也是正常的。pg_ctl
以独占用户身份运行postgres
。sudo -u postgres
如果sudo
必须使用,请使用。
您提到的第一个错误可以通过 #1 解决,其他两个错误可以通过 #2 解决。或者只需使用随操作系统软件包附带的启动脚本,它就可以处理这些细节,因此您无需学习它们。
文档位于https://wiki.archlinux.org/index.php/PostgreSQL告诉:
这意味着systemctl enable postgresql.service
systemctl start postgresql.service
相反到pg_ctl [...options...] start
。
答案2
无论如何,我想补充一点,我刚刚在 Ubuntu 上使用 Postgresql 10 时遇到了一个与之密切相关的问题。事实上,could not open PID file “/var/lib/postgres/data/postmaster.pid”
这就是我来到这里的原因。我尝试了在这里和其他地方学到的东西,但都无济于事,然后诉诸古老的重启。一切都好了。哦,好吧。我不能说我学到了很多东西,或者它教会了我很多东西,除了记得尝试重启...