欢迎光临
我们一直在努力

表执行insert时,提示could not read block 2394 in file “base/298783/598992“: read only 0 of 8192 bytes

文章目录

  • 环境
  • 症状
  • 问题原因
  • 解决方案

环境

系统平台:银河麒麟 (海光) 版本:4.5.8

症状

表执行insert时,提示could not read block 2394 in file “base/298783/598992”: read only 0 of 8192 bytes

问题原因

根据base/298783/598992查找到是数据表的文件损坏,不是索引,然后导致insert失败。

解决方案

1、如果损坏表中没有数据,则可以采取如下方案:

# 清空表数据同时会重置数据文件
truncate schemaname.tablename;

2、如果损坏表中有数据,则建议逻辑导出表结构及数据,然后对损坏表进行重命名以保留原表,再导入备份文件,详细如下:

1)逻辑导出损坏表的表结构和数据

# 备份为sql脚本的方式,方便查看表结构,适用于数据量小的表
pg_dump U username d dbname t schemaname.tablename Fp v > xxx.sql
# 备份为backup文件的方式
pg_dump U username d dbname t schemaname.tablename Fc v > xxx.backup

2)对损坏表重命名,同时也需要重命名约束、索引名等,否则下面导入时会提示已存在

alter table schemaname.损坏表 rename to schemaname.损坏表_bak;
alter index 损坏表索引 rename to 损坏表索引_bak;

3)导入备份的表结构和数据

# sql脚本的导入方式
psql U username d dbname c "\\i xxx.sql"
# backup文件的导入方式
pg_restore U username d dbname v xxx.backup

赞(0)
未经允许不得转载:171主机测评 » 表执行insert时,提示could not read block 2394 in file “base/298783/598992“: read only 0 of 8192 bytes
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址