联系:手机/微信(+86 17813235971) QQ(107644445)
作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]
朋友和我反馈pg库异常,通过查看日志确认最初故障是由于磁盘空间满,导出出现类似:无法扩展文件 “pg_tblspc/16394/PG_13_202007201/16395/5055912.143″: No space left on device错误
2025-07-28 09:06:02.703 HKT [15352] 错误: 无法扩展文件 "pg_tblspc/16394/PG_13_202007201/16395/5055912.143": No space left on device 2025-07-28 09:06:02.703 HKT [15352] 提示: 检查空闲磁盘控件. 2025-07-28 09:06:02.703 HKT [15352] 语句: insert into 语句 2025-07-28 09:06:02.703 HKT [576] 错误: 无法扩展文件 "pg_tblspc/16394/PG_13_202007201/16395/4477723.73": No space left on device 2025-07-28 09:06:02.703 HKT [576] 提示: 检查空闲磁盘控件. 2025-07-28 09:06:02.703 HKT [576] 语句: update 语句 2025-07-28 09:06:02.706 HKT [11940] 错误: 无法扩展文件 "pg_tblspc/16394/PG_13_202007201/16395/5055912.143": No space left on device 2025-07-28 09:06:02.706 HKT [11940] 提示: 检查空闲磁盘控件. 2025-07-28 09:06:02.706 HKT [11940] 语句: insert into 语句
后续对d盘空间进行了清理,pg报无法打开文件”pg_tblspc/16394/PG_13_202007201/16395/4477706.16″(目标数据块5544906): Permission denied
2025-07-28 10:53:10.435 HKT [11920] 语句: insert into语句 2025-07-28 10:53:10.435 HKT [18300] 错误: 无法打开文件"pg_tblspc/16394/PG_13_202007201/16395/4477706.16"(目标数据块5544906): Permission denied
和报:警告: 无法写入pg_tblspc/16394/PG_13_202007201/16395/4477706的块5545387错误
2025-07-28 11:05:11.008 HKT [5380] 警告: 无法写入pg_tblspc/16394/PG_13_202007201/16395/4477706的块5545387 2025-07-28 11:05:11.008 HKT [5380] 详细信息: 多次失败 --- 写错误可能是永久性的 2025-07-28 11:05:11.015 HKT [12072] 错误: 无法打开文件"pg_tblspc/16394/PG_13_202007201/16395/4477706.17"(目标块5545398):上一段只有952个块 2025-07-28 11:05:11.015 HKT [12072] 上下文: 写入关系pg_tblspc/16394/PG_13_202007201/16395/4477706的块5545398 2025-07-28 11:05:11.015 HKT [12072] 语句: select 语句 2025-07-28 11:05:11.016 HKT [12072] 警告: 无法写入pg_tblspc/16394/PG_13_202007201/16395/4477706的块5545398 2025-07-28 11:05:11.016 HKT [12072] 详细信息: 多次失败 --- 写错误可能是永久性的
查看4477706相关文件情况,初步看部分文件大小不对,结合上述报错,可以断定该表异常
通过查询pg字典确认该表具体名称
xifenfei=# select oid,relname,relnamespace from pg_class where relfilenode=4477706; oid | relname | relnamespace -------+------------------+-------------- 16880 | xifenfei01_log | 2200 (1 行记录)
尝试pg_dump导入数据报错:多次失败 — 写错误可能是永久性的
这次运气比较好,损坏的对象是一个日志表,可以直接清理掉,对该日志表进行清理,然后正常导出数据,如果遇到的损坏表是业务需要的表,可以使用pdu(PostgreSQL表文件损坏恢复—pdu恢复损坏的表文件)进行恢复