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

Поиск
Список
Период
Сортировка
От Deniz Atak
Тема Re: ERROR: could not read block 4707 of relation 1663/16384/16564: Success
Дата
Msg-id CAL30GtE7EcA0r3iDtcrJ3vFaEtiGWN+tS63trZ6AaR=VaDysug@mail.gmail.com
обсуждение исходный текст
Ответ на Re: ERROR: could not read block 4707 of relation 1663/16384/16564: Success  ("Tomas Vondra" <tv@fuzzy.cz>)
Ответы Re: ERROR: could not read block 4707 of relation 1663/16384/16564: Success  ("Tomas Vondra" <tv@fuzzy.cz>)
Список pgsql-general
Hi Thomas,

thanks for your answer. We decided not to go further with this error, because soon we will have another product that replaces this one. Because I want to learn more about this topic, I did the following:

Before I write your code, I tried:
select oid,ctid,relname from pg_class where ctid='(4707,0)';

but it resulted in:
oid | ctid | relname
-----+------+---------
(0 rows)

Isn't there suppose to be a ctid of '(4707,0)'? Or did I misunderstand what you have written?

Regards,
Deniz

On Mon, Aug 1, 2011 at 1:21 PM, Tomas Vondra <tv@fuzzy.cz> wrote:
On 1 Srpen 2011, 8:27, Deniz Atak wrote:
> Deepak, Tom thanks for answering.
>
> Tom, we have psql 8.1.18. So you are right, this weird message is because
> of
> the old version. I will check with my colleague about the possible
> reasons.
> What can I do if there is a messed up table?

First of all, you should find out what caused the mess. This could be
really difficult as it might be a rare hw or sw glitch. Anyway consider
upgrading to 8.1.23 if possible.

If you have a fresh backup (i.e. one with all the data in the table), just
restore it and use it. You may even use just this particular table (just
move it using COPY).

If you need to recover the data, you'll have to play a bit with it as you
need to 'skip' all the corrupted blocks. The  query reports block 4707 is
corrupted - how many blocks does the relation have?

You can skip the blocks using 'ctid' column, which is basically "(block
id, item id)" so to skip block 4707 you can do this

SELECT * FROM table WHERE (ctid < '(4707,0)'::ctid OR ctid >=
'(4708,0)'::ctid)

and if fails with another "could not read block" error, put there another
such condition.

Tomas




В списке pgsql-general по дате отправления:

Предыдущее
От: "Tomas Vondra"
Дата:
Сообщение: Re: ERROR: could not read block 4707 of relation 1663/16384/16564: Success
Следующее
От: Deniz Atak
Дата:
Сообщение: Re: ERROR: could not read block 4707 of relation 1663/16384/16564: Success