ITPub博客

首页 > 数据库 > PostgreSQL > catalog is missing 10 attribute(s)错误的解决办法一例

catalog is missing 10 attribute(s)错误的解决办法一例

原创 PostgreSQL 作者:chenfeng 时间:2021-04-28 11:56:09 1 删除 编辑

查询该表报错:

test=# select count(*) from test;

2021-04-28 11:41:35.783 HKT [36138] ERROR:  catalog is missing 10 attribute(s) for relid 30804 at character 22

2021-04-28 11:41:35.783 HKT [36138] STATEMENT:  select count(*) from test;

ERROR:  XX000: catalog is missing 10 attribute(s) for relid 30804

LINE 1: select count(*) from test;

                             ^

LOCATION:  RelationBuildTupleDesc, relcache.c:581

Time: 0.707 ms


一般报这种错就是表有损坏,可以尝试从备份中恢复,或者直接删除,但 删除该表发现报错:

test=# drop table if exists test;

2021-04-28 11:39:50.670 HKT [36138] ERROR:  cache lookup failed for attribute 9 of relation 30804

2021-04-28 11:39:50.670 HKT [36138] STATEMENT:  drop table if exists test;

ERROR:  XX000: cache lookup failed for attribute 9 of relation 30804

LOCATION:  get_relid_attribute_name, lsyscache.c:808

Time: 0.870 ms


问题解决思路:

找到test表对应的oid值,然后根据oid值在pg_class和pg_depend表里删除对应的元数据信息。

查test表的oid值:

test=# select oid from pg_class where relname='test';

  oid  

-------

 30804

(1 row)


Time: 0.649 ms


删除pg_class中对应test的元数据信息:

11:41:42 (postgres@127.0.0.1:5432)test=# delete from pg_class where oid =30804;

DELETE 1

Time: 1.189 ms


删除pg_class中对应test的元数据信息:

11:41:55 (postgres@127.0.0.1:5432)test=# delete from pg_depend where objid = 30804;

DELETE 1



test表已正常从数据库里删除:

test=# select count(*) from test;

2021-04-28 11:52:06.483 HKT [36138] ERROR:  relation "test" does not exist at character 22

2021-04-28 11:52:06.483 HKT [36138] STATEMENT:  select count(*) from test;

ERROR:  42P01: relation "test" does not exist

LINE 1: select count(*) from test;

                             ^

LOCATION:  parserOpenTable, parse_relation.c:1180

Time: 0.547 ms



备注:

pg_class元数据表记录表和几乎所有具有列或者像表的东西。这包括索引(但还要参见pg_index)、序列(但还要参见pg_sequence)、视图、物化视图、组合类型和TOAST表。


pg_depend

目录pg_depend元数据表记录数据库对象之间的依赖关系。这些信息允许DROP命令查找必须被DROP CASCADE删除的其他对象,

或者在DROP RESTRICT情况下阻止删除。



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15498/viewspace-2770255/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: PostgreSQL插件汇总
请登录后发表评论 登录
全部评论
交流MySQL,PolarDB/PolarDB-X,PostgreSQL,MongoDB和Redis技术。

注册时间:2015-12-07

  • 博文量
    784
  • 访问量
    2689211