我已经从 Manjaro 上的 pacman repo 安装了 postgres,但在尝试启动它时遇到了麻烦。
我已按照arch wiki的说明创建了我的数据库。initdb -D /var/lib/postgres/data/
我运行以下命令,但没有完成。pg_ctl -D /var/lib/postgres/data/ -l logfile start
日志文件错误是FATAL: could not create lock file "/run/postgresql/.s.PGSQL.5432.lock": No such file or directory
有人可以解释一下这个错误的含义以及如何让 Postgres 启动吗?
该
/run/postgresql
目录此时不存在,因为它是由您可能忽略的说明的最后一步创建的:这意味着运行
systemctl start postgresql
和systemctl enable postgresql
令人误解的是 initdb 输出的最后一部分:
systemctl
当您使用将 postgresql 作为系统服务进行管理时,必须忽略此建议。系统服务将负责/run/postgresql
使用适当的权限进行创建,然后pg_ctl
使用适当的参数和路径运行命令。当使用 systemd 时,它专门负责创建和设置权限的systemd-tmpfiles 。
/run/postgresql
systemd-tmpfiles 服务是 systemd 的一部分,它负责创建和删除 temporaray 和 volatile 文件(in
/run
、/var/run
、/tmp
等/var/tmp
)。该服务在引导期间启动。您可能需要查看手册页以tmpfiles.d
获取更多详细信息。解决方案1(通过管理临时目录/run/postgresql、/var/run/postgresql)
我们可以在启动时使用systemd-tmpfiles机制通过创建 postgresql 配置文件在启动时动态创建目录/run/postgresql ,如下所示
解决方案 2(通过重新定位 PostgreSQL 锁定文件位置)
在这里,我们可以为 PostgreSQL 锁定文件提供任何路径,该文件已经存在于系统上,并且具有 postgres 用户管理锁定文件所需的权限。