Я запустил базу данных postgres на внешнем жестком диске, и кажется, что она была повреждена после повторного подключения к спящему ноутбуку, ЧТО ДУМАЛ, что сервер все еще работает. После выполнения нескольких команд переиндексации для исправления некоторых других ошибок, я получаю следующую ошибку:
ОШИБКА: отсутствует номер блока 0 для значения тоста 12942 в pg_toast_2618
Пример командычто возвращает эту ошибку:
select table_name, view_definition from INFORMATION_SCHEMA.views;
Я запустил команду "select 2618 :: regclass;"это дает вам таблицу проблем. Однако переиндексация, похоже, не решает проблему. Я вижу много предложений о том, как найти поврежденную строку и удалить ее. Тем не менее, таблица, которая, по-видимому, имеет повреждение в моем экземпляре, называется pg_rewrite, и она выглядит не как поврежденная строка, а как поврежденная КОЛОННА.
Я выполнил следующие команды, но они не решают проблему.
REINDEX table pg_toast.pg_toast_$$$$;
REINDEX table pg_catalog.pg_rewrite;
VACUUM ANALYZE pg_rewrite; -- just returns succeeded.
Я могу выполнить следующую инструкцию SQL, и она вернет данные.
SELECT oid, rulename, ev_class, ev_type, ev_enabled, is_instead, ev_qual FROM pg_rewrite;
Однако, если я добавлю столбец ev_action к вышеупомянутому запросу, он выдаст похожую ошибку:
ОШИБКА: отсутствует номер фрагмента 0 для значения тоста 11598 в pg_toast_2618
Эта ошибка появляетсявлиять на все запросы, связанные со схемой, на такие вещи, как таблицы INFORMATION_SCHEMA. К счастью, кажется, что все мои таблицы и данные в моих таблицах в порядке, но я не могу запросить sql, который генерирует эти таблицы, и любые созданные мной представления кажутся недоступными (хотя я заметил, что могу создавать новые представления).
Я недостаточно знаком с Postgresql, чтобы точно знать, что такое pg_rewrite, но, полагаю, я не могу просто обрезать данные в таблице или установить ev_action = null.
Я не уверен, что делать дальше с информацией, которую я собрал.