Postgres 9.5-main.pg_stat_tmp:没有这样的文件或目录

Postgres 9.5-main.pg_stat_tmp:没有这样的文件或目录

几个月前,我在不同的情况下(因为我忘记了细节)遇到了这个问题,现在又遇到了。如果你谷歌一下这个问题,会发现有很多类似的帖子,但似乎没有一个能真正得出令人满意的结论。除非它只是基于权限,而我很难看出这是基于权限的。

我正在从 Debian init.d 脚本停止并启动 postgres 服务,如果认为有必要恢复数据库,该脚本就会运行。

它停止没有问题:

systemctl stop postgresql

恢复操作运行顺利(pgbackrest,远程托管的 stanza 备份):

sudo -u postgres bash -c "pgbackrest --log-level-console=info --stanza=$stanza --delta restore"

然后启动操作就挂起,没有生成调试或日志:

systemctl start postgresql    

如果我将对 systemctl 的调用替换为对 postgres 的直接调用:

sudo -u postgres bash -c "/usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.5/main -c config_file=/etc/postgresql/9.5/main/postgresql.conf

我收到以下错误(请忽略时间戳,这只是我正在使用的测试箱):

2016-11-03 17:30:27 UTC [2511-3] FATAL:  could not open directory "/var/run/postgresql/9.5-main.pg_stat_tmp": No such file or directory

接下来要指出的是,Postgres 9.5 和 9.6 在系统中共存,9.6 实例通过 systemctl 调用(启动所有配置的集群)停止并正常启动,因此如果是权限问题,为什么 9.5 会失败?如果确实需要做的只是创建此文件,那么我看不出错误的原因,或者错误可能是转移注意力的借口?

TEST-RIG-postgres@CIE-4096:/root$ ls -l /var/run/postgresql/
total 4
drwxr-s--- 2 postgres postgres 100 Nov  3 17:36 9.6-main.pg_stat_tmp
-rw-r--r-- 1 postgres postgres   5 Nov  3 17:20 9.6-main.pid

ls -l /var/run/
...
drwxrwsr-x  3 postgres    postgres     120 Nov  3 17:30 postgresql

我对此有点困惑。可能是因为它是在系统初始化期间调用的(Postgres 通常可以正常启动)?我在 LSB 部分添加了以下内容,没有任何区别:

# Required-Start: postgresql

答案1

解决方案:运行

mkdir -p /var/run/postgresql/9.5-main.pg_stat_tmp
chown postgres /var/run/postgresql/9.5-main.pg_stat_tmp
chgrp postgres /var/run/postgresql/9.5-main.pg_stat_tmp

相关内容