检测和修复Postgresql中损坏的索引?

检测和修复Postgresql中损坏的索引?,sql,postgresql,Sql,Postgresql,今天我遇到了一个例子,查询结果中缺少一条记录,而表中存在一条记录。我追溯到问题可能是索引损坏。在我做了REINDEX之后,问题就解决了 问题是,通常当我运行报告时,我会得到超过10000条记录。我不可能知道是否有丢失的记录。今天我很幸运地发现了这个问题 有没有办法在索引损坏时获取通知 如果没有,我如何编写一个函数来重新索引模式中的所有索引?索引损坏是一个非常严重的问题。我认为你需要从根本上诊断和解决这个问题,而不是试图在你的查询中使用创可贴。这可能是由任何Postgres进程的kill-9等不良

今天我遇到了一个例子,查询结果中缺少一条记录,而表中存在一条记录。我追溯到问题可能是索引损坏。在我做了
REINDEX
之后,问题就解决了

问题是,通常当我运行报告时,我会得到超过10000条记录。我不可能知道是否有丢失的记录。今天我很幸运地发现了这个问题

有没有办法在索引损坏时获取通知


如果没有,我如何编写一个函数来重新索引模式中的所有索引?

索引损坏是一个非常严重的问题。我认为你需要从根本上诊断和解决这个问题,而不是试图在你的查询中使用创可贴。这可能是由任何
Postgres
进程的
kill-9
等不良管理行为造成的

对于您的问题:AFAIK没有验证工具。我相信,扫描整个索引的查询(例如,按索引排序)会在索引中找到损坏的页面


我建议您阅读。

您运行的是哪个确切的Postgres版本?我运行的是postgresql 9.3,但不是确切的版本。9.3有10个不同的版本。
select version()
为您提供了什么?9.3.3之后有许多错误修复,特别是9.3.4中的一个可以防止索引损坏。你真的应该使用最新的版本。一些在PostgreSQL wiki中列出。例如,
amcheck
模块是。如何编写这样的查询?问题是,当运行查询时,我会得到结果。。这似乎更像是一个记录没有正确索引的问题,而不是它在那里然后丢失了。。。这是一项新记录……但如果没有某种形式的工具,您如何主动发现腐败?