我在Glassfishserver上使用psql 8.1.18.我有这样的查询:
select ip,round((select sum(t1.size) from table t1))
from table
where date > '2011.07.29'
and date < '2011.07.30'
and ip = '255.255.255.255'
group by ip;
Run Code Online (Sandbox Code Playgroud)
当我运行此查询时,我收到此错误:
ERROR: could not read block 4707 of relation 1663/16384/16564: Success
Run Code Online (Sandbox Code Playgroud)
但是这个查询工作正常:
select ip,round(sum(size)/175)
from table
where date > '2011.07.29'
and l_date < '2011.07.30'
and ip = '255.255.255.255'
group by ip;
Run Code Online (Sandbox Code Playgroud)
我认为这可能是一个数据库错误,我需要从备份恢复表,也许.但首先我需要了解这些损坏的数据存在的位置.有谁知道如何找到1663/16384/16564关系?还是4707块?
编辑:我试过这段代码:
select relname , relfilenode from pg_class where relname in ('1663','16384','16564');
Run Code Online (Sandbox Code Playgroud)
但它返回:
relname | relfilenode
---------+-------------
(0 rows)
Run Code Online (Sandbox Code Playgroud)
fra*_*ncs 11
看起来表或索引中存在坏块.
要查找错误数据,也许您可以查询pg_class视图;
选择oid,来自pg_class的relname,其中oid = 1663或oid = 16564;
看看结果是什么!
如果结果是索引,只需重新创建损坏的索引;
如果结果是表,则表示该表的某些数据已损坏,您可以通过传递这些损坏的数据或从最近备份集恢复表来将参数"zero_damaged_pages"设置为on!
有关参数"zero_damaged_pages"的更多信息 http://www.postgresql.org/docs/9.0/static/runtime-config-developer.html
归档时间: |
|
查看次数: |
10019 次 |
最近记录: |