首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重建损坏的postgres主键索引

如何重建损坏的postgres主键索引
EN

Stack Overflow用户
提问于 2014-01-16 00:52:04
回答 2查看 5K关注 0票数 4

我有一个表,其中有一行不能通过id找到。如果我遍历PK索引,就会找到该行。如果我删除索引,就会找到该行。如果添加新索引,则找不到行。

代码语言:javascript
复制
d5toqvrtbm8bbu=> SELECT id, created_at FROM widgets WHERE id = 1155301;
   id    |         created_at         
---------+----------------------------
 1155301 | 2014-01-10 02:59:47.856214
(1 row)

d5toqvrtbm8bbu=> CREATE UNIQUE INDEX widgets_pkey ON widgets(id);
CREATE INDEX
d5toqvrtbm8bbu=> SELECT id, created_at FROM widgets WHERE id = 1155301;
 id | created_at 
----+------------
(0 rows)

d5toqvrtbm8bbu=> SELECT id, created_at FROM widgets WHERE id - 1 + 1 = 1155301;
   id    |         created_at         
---------+----------------------------
 1155301 | 2014-01-10 02:59:47.856214
(1 row)

d5toqvrtbm8bbu=> DROP INDEX widgets_pkey;
DROP INDEX
d5toqvrtbm8bbu=> SELECT id, created_at FROM widgets WHERE id = 1155301;
   id    |         created_at         
---------+----------------------------
 1155301 | 2014-01-10 02:59:47.856214
(1 row)

d5toqvrtbm8bbu=> CREATE UNIQUE INDEX widgets_pkey ON widgets(id);
CREATE INDEX
d5toqvrtbm8bbu=> SELECT id, created_at FROM widgets WHERE id = 1155301;
 id | created_at 
----+------------
(0 rows)

这是在postgres 9.3上

有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2014-08-01 09:00:49

我的数据库也有类似的问题。我试着重新建立索引,但没有帮助。

代码语言:javascript
复制
VACUUM FULL widgets;

完全解决了这个问题。

票数 5
EN

Stack Overflow用户

发布于 2014-08-02 09:26:17

循环回到这个位置:

我与Heroku support一起工作(这是Heroku Postgres托管的),他们告诉我9.3.2中有一个bug,当一个追随者被提升时,可能会导致这种腐败。(我在几代被提升的追随者身上经历了这一点。)

他们说这个问题在9.3.4中已经解决了,我最终能够从备份中重新创建损坏的行,删除这些行,然后重新构建。

到目前为止还没有再发生。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21143440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档