默认情况下,我的 PostgreSQL 安装在中创建一个套接字,/tmp
但我的psql
命令行客户端正在中查找/var/run/postgresql/.s.PGSQL.5432
。
为了解决这个问题,我编辑postgresql.conf
并将目录更改为
unix_socket_directories = '/var/run/postgresql/'
postgresql
不幸的是,默认情况下,目录中没有目录var/run
。因此,我创建了它并启动了服务器,一切运行正常。当我关闭并重新启动服务器时,由于某种原因,目录/var/run/postgresql
消失了。这导致 postgres 启动崩溃并出现错误:
FATAL: could not create lock file "/var/run/postgresql/.s.PGSQL.5432.lock": No such file or directory
感谢帮助!
答案1
解决方案 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 用户管理锁文件所需的权限。