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