You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法向PostgreSQL表添加新行,报错:Could not read block 2 in file...

PostgreSQL 读取块错误的解决办法

这个错误说明PostgreSQL读取数据文件base/16385/16433的第2块时完全失败,只读到0字节,大概率是数据文件损坏或者底层存储出了问题,按下面的步骤排查修复:

  • 先查存储是否正常
    先检查磁盘有没有坏道、文件系统是否出错,用系统自带工具排查——Linux用fsck,Windows用磁盘检查工具,先排除硬件或文件系统层面的问题。

  • 找到损坏的数据库对象
    用PostgreSQL内置函数定位这个文件对应的表或索引:

    SELECT relname, relkind FROM pg_class WHERE relfilenode = 16433;
    

    执行后就能知道是哪个表(relkind为'r')还是索引(relkind为'i')出了问题。

  • 针对性修复

    • 如果是索引损坏:直接删了重建就行,比如找到索引名是idx_user_id,执行:
      DROP INDEX idx_user_id;
      CREATE INDEX idx_user_id ON your_table (user_id);
      
    • 如果是表损坏:
      1. 先试试用pg_dump导出该表数据,能导出的话就建个新表把数据导进去,再替换原表;
      2. 要是导出失败,pg_resetwal是最后手段(会丢数据,一定要先备份整个数据目录):先停PostgreSQL服务,运行pg_resetwal -D /var/lib/postgresql/14/main(替换成你的数据目录),重启服务后再尝试恢复。
  • 优先用备份恢复
    要是有最近的全量备份加增量备份,直接恢复到备份状态,这是最稳妥的方式,能最大程度保证数据安全。

内容的提问来源于stack exchange,提问作者Aung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 20:24:54