FATAL: could not read block 0 in file Input/output error ERROR: could not read block 84 in file "base/16386/670007": Input/output error ERROR: could not read block 4707 of relation 1663/16384/16564: Success
如果PG的登陆出现上述错误 则一般说明PG数据文件出现了磁盘故障,导致无法登陆数据库,可以尝试用以下步骤解决
步骤1 设置 zero_damaged_pages 参数 并尝试重建系统索引,zero_damaged_pages加入到postgre配置文件中,并reload或重启pg服务进程:
reindexdb -p 5433 --system dbname
步骤2 设置 ignore_system_indexes=true , 以尝试忽略system index的影响:
pg_ctl -D /data -o '-c ignore_system_indexes=true' start 并连接数据库 psql $dbname
步骤3 重建全库 索引
reindex database "dbname";
步骤4 vacuum 全表库
vacuum full analyze verbose; vacuum full verbose;
步骤5 禁用约束
update pg_class set relchecks=0 where relname='tablename';
步骤六 重建索引
reindex database "dbname";
最后建议用pg_dump 导出全库 后 重建数据库。
如果做了上述步骤还不行, 可以考虑用pg_filedump 抽取所有文件内的数据后再重建数据库。
Comment