Назад | Перейти на главную страницу

postgresql: сообщение 'недопустимый заголовок страницы' даже после удаления и повторного создания

Мой сервер Ubuntu 14.04 LTS, на котором запущен postgresql 8.4.11, разбился, и после перезагрузки сервер приложений, выполняющий запрос к postgresql, сообщил о следующей ошибке

ERROR: invalid page header in block 40 of relation base/18038/22194

Я googledd, попытался создать дамп и использовал полученное сообщение об ошибке, чтобы идентифицировать сломанную таблицу. Затем я казнил

SET zero_damaged_pages = on;
VACUUM FULL damaged_table;
-- vacuum didn't report any errors here
REINDEX TABLE damaged_table;

другие упомянули reindexdb, поэтому я побежал

$ reindexdb -s mydb

тоже, но проблема осталась прежней.

Наконец - у меня есть рабочая резервная копия из базы данных - я удалил и воссоздал всю базу данных

DROP DATABASE mydb;
CREATE DATABASE mydb;

и восстановил резервную копию:

cat mydump| sudo -u postgres pgsql mydb

Но даже сейчас проблема остается прежней. Я мало что знаю о postgresql, но как такая ошибка может пережить воссоздание базы данных? К сожалению, мне нужно снова заставить базу данных работать на том же компьютере.

Есть ли что-нибудь еще, что я могу попытаться восстановить базу данных?

Если у вас есть раб, установите hot_standby_feedback к 'on' на нем, если еще не. Сделайте pg_dump и запишите его в / dev / null, чтобы не занимать места.

nohup pg_dump db_name -v -Fc -f /dev/null & 

Если дамп удастся, значит с вашим рабом все в порядке. Выполните аварийное переключение. Потери данных не будет.

Другой способ проверить ваше ведомое устройство - это сделать:

explain select count(*) from table_name;

Если это удалось и если он использует сканирование последовательности, то ваш ведомый в порядке. Возможно, вам не придется рассматривать этот вариант, если он использует сканирование индекса.

Примечание: это работает только в том случае, если ваш мастер подвержен повреждению уровня хранения.

Только сегодня я столкнулся с той же проблемой, и я смог ее исправить.

Похоже, у вас есть какие-то повреждения в вашей файловой системе или на диске.

Рекомендую посмотреть здесь: повреждение postgresql

После этого я заглянул в dmesg или /var/log/messages для любых аппаратных ошибок, которые вы можете увидеть.

Если у вас есть рабочий дамп, я бы скопировал текущий каталог данных из /var/lib/postgresql/8.4/main, бегать pg_createcluster 8.4 main в новом каталоге и попробуйте восстановить его и посмотрите, поможет ли это решить какие-либо проблемы.

Если после этого у вас все еще есть проблемы, продолжайте #postgresql на Freenode IRC или pgsql-general@postgresql.org был бы моим следующим шагом, если бы мне нужно было запустить его как можно быстрее.

Надеюсь, это поможет. Удачи. знак равно