PostgreSQL 致命:无法访问文件“pg_stat_statements”:没有这样的文件或目录

Posted

技术标签:

【中文标题】PostgreSQL 致命:无法访问文件“pg_stat_statements”:没有这样的文件或目录【英文标题】:PostgreSQL FATAL: could not access file "pg_stat_statements": No such file or directory 【发布时间】:2018-11-05 16:35:10 【问题描述】:

我们的 postgres 数据库(在 Debian 上安装的 9.4 版)停止工作(它已经工作了几个月没有问题)。当我尝试使用 psql 连接时,我得到:

psql: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

当我检查状态时,它似乎没问题:

service postgresql status
● postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
   Active: active (exited) since Mon 2018-11-05 17:04:58 CET; 31s ago
  Process: 1367 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 1367 (code=exited, status=0/SUCCESS)

我尝试重启服务器

service postgresql restart

在日志文件中我得到了

FATAL:  could not access file "pg_stat_statements": No such file or directory

我试图找到解决方案。大多数答案是 pg_stat_statements 模块存在问题。我检查了 /etc/postgresql/9.4/main/postgres.conf 文件,但该行被注释:

#shared_preload_libraries = ''          # (change requires restart)

据我所知,我们没有更改任何 postgres 配置文件,最近也没有进行任何升级或更新。提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

我解决了安装问题

postgresql11-contrib-11.7-1PGDG.rhel8

注意官方 (pgdg11 repo) RPM for RHEL8/CentOS/Fedora 在数据包名称中有版本(即 11):

postgresql11-contrib

P.S Yum 还安装了依赖项:perl-Carp-1.42-396.el8.noarch perl-Exporter-5.72-396.el8.noarch perl-libs-4:5.26.3-416.el8

【讨论】:

对于 FreeBSD 12.2 - pkg install postgresql11-contrib-11.11【参考方案2】:

我曾经遇到过同样的问题。但后来发现原因是我运行了psql命令“alter system set shared_preload_libraries='pg_stat_statements';”,覆盖了$PGDATA路径下的PostgreSQL.auto.conf。因此,当通过发出“service postgresql start”再次重新启动 postgesql 实例时,postmaster 进程将从 $PGDATA 下的 conf 文件“postgreSQL.auto.conf”中读取参数“shared_preload_libraries”,而不是从 /etc /postgresql/10/main/postgres.conf。其中参数=''。所以,如果你想解决这个问题,请把 postgresql.auto.conf 中的参数 shared_preload_libraries='pg_stat_statements' 注释掉。谢谢。

【讨论】:

【参考方案3】:

最后我安装了 pg_stat_statements,然后我就可以启动 postgresql。

添加到 postgres.conf:

shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.track = all
pg_stat_statements.max = 10000
track_activity_query_size = 2048

安装包 postgresql-contrib-9.4:

apt-get install postgresql-contrib-9.4

重启postgresql服务:

service postgresql restart

【讨论】:

【参考方案4】:

我今天遇到了这个问题,我发现有两个问题阻止了我:

postgresql-contrib 的版本必须与 postgresql-server 的版本相匹配,但是官方 repo 可能会提供不同的版本。就我而言,遵循回购https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-3.noarch.rpm 提供了
postgresql-contrib.x86_64                   9.2.24-1.el7_5             base     

postgresql95-server.x86_64                  9.5.16-1PGDG.rhel7         @pgdg95  

如您所见,版本不匹配。我在https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/ 找到了正确版本的 postgresql-contrib:9.5.16 如果找不到合适的版本,可以自己构建: https://www.postgresql.org/docs/current/contrib.html

我必须在安装 postgresql95-server 之前安装 postgresql-contrib。 https://github.com/sous-chefs/postgresql/pull/241 报告了一个缺陷 对于第二个问题,我找不到更好的解决方法。

【讨论】:

以上是关于PostgreSQL 致命:无法访问文件“pg_stat_statements”:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

移动磁盘显示无法访问设备硬件出现致命错误,导致请求失败的文件恢复方案

致命:主机“::1”没有 pg_hba.conf 条目试图通过 ssh 隧道连接到 postgresql 服务器

正确查询以获取 PostgreSQL 数据库中的当前连接数

PostgreSQL远程连接配置管理/账号密码分配(解决:致命错误: 用户 "postgres" Ident 认证失败)

无法访问移动磁盘显示设备硬件出现致命错误,导致请求失败的数据找到法子

硬盘提示无法访问设备硬件出现致命错误,导致请求失败,里面的数据如何找到