PostgreSQL FATAL: could not read block 0 in file Input/output error错误

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 抽取所有文件内的数据后再重建数据库。


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *