我已经从 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 日志文件启动
当您使用systemctl
postgresql 作为系统服务进行管理时,必须忽略此建议。系统服务将负责/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 用户管理锁文件所需的权限。