加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql-9.4.1索引文件丢失

发布时间:2020-12-13 17:11:12 所属栏目:百科 来源:网络整理
导读:postgresql-9.4.1索引文件丢失,应该是一个小BUG。具体模拟重现,看代码: 1、创建一个新的表空间: postgres=#CREATETABLESPACEmytbsLOCATION'/data/pg94/mytbs';CREATETABLESPACE 2、创建表和索引,都放在pg_default表空间内 postgres=#createtablet(idint

postgresql-9.4.1索引文件丢失,应该是一个小BUG。具体模拟重现,看代码:

1、创建一个新的表空间:

postgres=#CREATETABLESPACEmytbsLOCATION'/data/pg94/mytbs';
CREATETABLESPACE

2、创建表和索引,都放在pg_default表空间内

postgres=#createtablet(idint,msgtext);
CREATETABLE
postgres=#createindexidx_t_idont(id);
CREATEINDEX
postgres=#insertintotvalues(1,'a'),(2,'b');
INSERT02
postgres=#select*fromt;
id|msg
----+-----
1|a
2|b
(2rows)

3、设置默认表空间为mytbs,并变更ID字段类型

postgres=#setdefault_tablespace='mytbs';
SET
postgres=#altertabletalterCOLUMNidsetdatatypeint;
ALTERTABLE
postgres=#select*fromt;
ERROR:couldnotopenfile"pg_tblspc/16550/PG_9.4_201409291/13003/16564":没有那个文件或目录
postgres=#selectpg_relation_filepath('idx_t_id');
pg_relation_filepath
----------------------------------------------
pg_tblspc/16550/PG_9.4_201409291/13003/16564
(1row)

查询报错,索引文件丢失。

原因分析:因为ID字段上有索引,而变更ID字段类型需要重建索引。此时默认表空间不是原来的表空间,数据字典中记录的新索引文件的目录在新的表空间中,而新的表空间中并没有创建索引文件。

算是PG9.4.1的一个BUG,应用时注意这种情况发生。解决方法:

postgres=#reindexindexidx_t_id;
REINDEX
postgres=#select*fromt;
id|msg
----+-----
1|a
2|b
(2rows)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读