ОШИБКА: не удалось прочитать блок 4707 отношения 1663/16384/16564: успех - PullRequest
7 голосов
/ 01 августа 2011

Я использую psql 8.1.18 на сервере Glassfish.У меня есть такой запрос:

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;

Когда я запустил этот запрос, я получил эту ошибку:

ERROR:  could not read block 4707 of relation 1663/16384/16564: Success

Однако этот запрос работает нормально:

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;

Я думаю, что это может быть ошибка базы данных, и мне нужно восстановить таблицу из резервной копии, может быть.Но сначала мне нужно узнать, где существуют эти поврежденные данные.Кто-нибудь знает, как найти 1663/16384/16564 отношение?Или 4707 блок?

РЕДАКТИРОВАТЬ: я пытался этот код:

select relname , relfilenode from pg_class where  relname in ('1663','16384','16564');

, но он возвращает:

relname | relfilenode 
---------+-------------
(0 rows)

1 Ответ

10 голосов
/ 01 августа 2011

Похоже, что в таблице или индексе имеются плохие блоки.

Чтобы найти неверные данные, возможно, вы можете запросить представления pg_class;

выберите oid, relname из pg_class, где oid= 1663 или oid = 16564;

просто посмотрите, каков результат!

ЕСЛИ результатом является индекс, просто воссоздайте поврежденный индекс;

ЕСЛИ результатом является таблицаЕсли это означает, что некоторые данные таблицы повреждены, вы можете установить для параметра «zero_damaged_pages» значение «on», чтобы пропустить эти поврежденные данные или восстановить таблицу из недавно созданного набора резервных копий!

дополнительная информация о параметре "zero_damaged_pages" http://www.postgresql.org/docs/9.0/static/runtime-config-developer.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...