最近,我在表中的一列上遇到了 b 树索引的问题。我创建索引:
CREATE INDEX t_client_contact_email on t_client_contakt (email);
一切正常,但几天后,使用此索引进行搜索无法正常工作。重建这个索引(DROP - CREATE)everytning 是好的。
我能用这个做什么?我正在使用 Postgres 8.4。
最近,我在表中的一列上遇到了 b 树索引的问题。我创建索引:
CREATE INDEX t_client_contact_email on t_client_contakt (email);
一切正常,但几天后,使用此索引进行搜索无法正常工作。重建这个索引(DROP - CREATE)everytning 是好的。
我能用这个做什么?我正在使用 Postgres 8.4。
您可能会被一个最近修复的旧错误所困扰。
看到这个:
http://www.postgresql.org/docs/8.4/static/release-8-4-11.html
具体来说:
修复与清理同时插入的 btree 索引损坏 (Tom Lane)
由插入引起的索引页面拆分有时会导致同时运行的 VACUUM 错过删除它应该删除的索引条目。删除相应的表行后,悬空的索引条目会导致错误(例如“无法读取文件中的块N ...”)或更糟的是,在将不相关的行重新插入到 now-free表位置。此错误自 8.2 版以来一直存在,但发生频率如此之低,以至于直到现在才被诊断出来。如果您有理由怀疑它已经发生在您的数据库中,重新索引受影响的索引将解决问题。