数据库磁盘故障后,现在“索引的缓存查找失败”

数据库磁盘故障后,现在“索引的缓存查找失败”

在解决了托管我们的 Postgres 数据库的网络驱动器的一些问题后,我们遇到了此错误:

OperationalError: FATAL: cache lookup failed for index 2662

该特定错误来自 Python 命令行,但连接到数据库的其他尝试产生了同样的结果,无论是普通查询还是尝试转储数据库。

您如何修复此错误并恢复数据?

答案1

听起来您的数据损坏了。当您说“网络驱动器”时,这就是一个危险信号。配置 NFS 以获得 PostgreSQL 的数据可靠性非常困难。据我所知,配置 SMB 来获得它是不可能的。因此,最有可能的是,您在崩溃时遇到了数据损坏,因为网络挂载不安全。

2662 是 pg_class 上的 oid 索引 - 它基本上是表上的索引,列出了数据库中存在哪些表和索引。当它损坏时,您就会遇到大麻烦。

此时,最好的办法是尝试使用“-P”启动独立后端(当然,主后端要关闭),这将关闭系统索引的使用。然后尝试 REINDEX pg_class,并可能关闭其余的系统索引。如果此方法有效,请立即执行 pg_dump 备份,然后重新初始化数据库。系统中可能存在更多损坏。

如果这不起作用,请尝试发帖到 pgsql-general 邮件列表,您可能会在那里获得更多更快的回复。但最有可能的是,这要归咎于您的备份 - 或者,如果您的数据确实很重要并且您没有可用的备份,请聘请数据恢复专家。

相关内容