sql error: SERROR~CXX000~Mmissing chunk number 0 for toast value 3225264 in pg_toast_1582256~Ftuptoa

 

其中蓝色字体是我自己加的 黑色字体是我参考的帖子内容(因为还需要注册比较麻烦 我就把帖子内容拿出来了)

项目反馈玩家不能登录游戏,然后查询了下是玩家登录获取公会信息时候select * from club xxxxxx的时候报的这个错误,在网上查到了一篇解决方案

问题原因:某张表关联的toast表的data发生损坏。

解决方案:

    toast是The OverSized Attribute Storage Technique(超尺寸字段存储技术)的缩写,是超长字段在HighgoDB的一种存储方式。当某表中的超长字段的时候,那这个表会有与之相关联的Toast表。根据toast表的命名规则,假设存在表test的oid为2867,那么如果存在与之相关联的toast表,toast表名为pg_toast_2867。(这个要看你报错的表名是2619还是其他的 什么 我出的就是2619,在客户端连服务器时候报的)

 

1)通过toast的表名pg_toast_2619查询出哪张表出现了问题:

 

highgo=# select 2619::regclass;

   regclass

--------------

 pg_statistic

(1 row)

 

highgo=#  select relname,relfilenode,reltoastrelid from pg_class where relname='pg_statistic';

   relname    | relfilenode | reltoastrelid

--------------+-------------+---------------

 pg_statistic |        13241 |          2840

(1 row)

 

2) 找到该表后做一下简单的修复:

 

REINDEX table pg_toast.pg_toast_2619;

REINDEX table pg_statistic;

VACUUM ANALYZE pg_statistic;

 

3) 定位该表中损坏的数据行。

执行如下函数:

 

DO $$

declare

 v_rec record;

BEGIN

for v_rec in SELECT * FROM pg_statistic loop

        raise notice 'Parameter is: %', v_rec.ctid;

raise notice 'Parameter is: %', v_rec;

end loop; 

END;

$$

LANGUAGE plpgsql;

NOTICE:  00000: Parameter is: (46,9)

ERROR:  XX000: missing chunk number 0 for toast value 30982 in pg_toast_2619

CONTEXT:  PL/pgSQL function inline_code_block line 7 at RAISE

 

4) 将第3步中定位的记录删除:

 

delete from pg_statistic where ctid ='(46,9)';

 

5) 重复执行第3,4步,直到全部有问题的记录被清除。 


6) 完成以上步骤后对该表进行一次完整的维护或者索引重建。

我再删除完后 继续select * from club 仍然报上面的错误, 然后索引重建了也不行,但是select * from club limit xxx 没问题,于是先将所有的clubid 查询出来放在文档里面,用二分法select * from club limit xxx,找到有问题的那一条club数据,看club表里面的字段,看看哪个可能是会很长的,我找到后处理了下 然后问题解决了

 

参考 https://blog.csdn.net/pg_hgdb/article/details/85043756

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值