无法启动 postgres - 无法创建锁文件

无法启动 postgres - 无法创建锁文件

我已经从 Manjaro 上的 pacman repo 安装了 postgres,但在尝试启动它时遇到了麻烦。

我已遵循拱门维基并创建了我的数据库。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 启动吗?

答案1

我已按照 arch wiki 中的说明创建了我的数据库。initdb
-D /var/lib/postgres/data/

/run/postgresql此时目录不存在,因为它是由您可能忽略的说明的最后一步创建的:

最后,启动并启用postgresql.service。

systemctl start postgresql这意味着运行systemctl enable postgresql

令人误解的是 initdb 输出的最后部分:

成功。您现在可以使用以下命令启动数据库服务器:

    pg_ctl -D /var/lib/postgres/-l 日志文件启动

当您使用systemctlpostgresql 作为系统服务进行管理时,必须忽略此建议。系统服务将负责/run/postgresql使用适当的权限进行创建,然后pg_ctl使用适当的参数和路径运行命令。

答案2

当使用 systemd 时,它具体systemd-tmp文件负责创建/run/postgresql并设置其权限。

systemd-tmpfiles 服务是 systemd 的一部分,负责创建和删除临时文件和易失性文件(在/run/var/run/tmp等中/var/tmp)。该服务在启动期间启动。您可能需要查看手册页以tmpfiles.d了解更多详细信息。

答案3

解决方案 1(通过管理临时目录 /run/postgresql、/var/run/postgresql)

目录/运行/postgresql是临时目录。路径 /var/运行/postgresql通常是到 /run/postgresql 的符号链接。

systemd-tmp文件是管理此类临时文件和目录的机制。systemd-tmp文件在启动期间创建临时目录并设置其所有者、组和权限。它可能会读取三个不同位置的配置文件。/etc/tmpfiles.d 中的文件会覆盖 /usr/lib/tmpfiles.d 和 /run/tmpfiles.d 中同名的文件。

我们可以创建目录/运行/postgresql在启动时使用systemd-tmp文件通过创建如下的 postgresql 配置文件来建立机制

echo "d /run/postgresql 0755 postgres postgres -" > /usr/lib/tmpfiles.d/postgresql.conf

解决方案 2(通过重新定位 PostgreSQL 锁文件位置)

修复此问题的另一种方法是重新定位 PostgreSQL 锁定文件位置。我们可以通过使用以下查询来实现

ALTER SYSTEM SET unix_socket_directories='<any-existing-path-with-valid-permissions>, /tmp';

在这里,我们可以为系统中已存在的 PostgreSQL 锁文件提供任何路径,并且该文件具有 postgres 用户管理锁文件所需的权限。

相关内容