У меня есть база данных 9.0.1 с двумя поврежденными таблицами (одна таблица имеет 20 строк, а другая 140). Таблицы кажутся хорошими для операций чтения / выбора, но обновление определенных строк в таблице приводит к сообщениям об ошибках:
update media set updated_at = now() at time zone 'UTC';
ОШИБКА: не удалось прочитать блок 2 в файле "base / 16384/16485": только чтение 0 из 8192 байтов
update media_status set updated_at = now() at time zone 'UTC';
2011-04-14 00:15:15 UTC ОШИБКА: не удалось прочитать блок 3 в файле «base / 16384/16543»: только чтение 0 из 8192 байтов
2011-04-14 00:15:15 UTC ЗАЯВЛЕНИЕ: обновить набор media_status updated_at = now () в часовом поясе UTC;
Изучение поврежденных файлов в файловой системе (linux), они не равны нулю:
Базы / 16384/16485
-rwx ------ 1 postgres postgres 16384 2011-04-07 09:43 base / 16384/16485
Я выполнил команду «вакуум (FULL, VERBOSE)», и повреждение (или, по крайней мере, ошибки при обновлении) исчезло. Ожидается ли, что команда «вакуума (FULL)» может / могла бы исправить повреждение таблицы? Предоставляет ли это какие-либо подсказки относительно того, что могло произойти?
Есть ли способ определить, как / когда могло произойти это повреждение?
Я подозреваю, что это могло произойти во время резервного копирования на уровне файловой системы (т.е. pg_start_backup (), tar -czf ..., pg_stop_backup ()), поскольку я выполнял резервное копирование и перемещал базу данных в другую систему. После восстановления файлов и запуска postgres я начал получать эти ошибки. Я пытался восстановить несколько раз с одним и тем же архивом tar с одинаковыми результатами (на разных системах).
Спасибо,
Dan