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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。