Версия: 9.4.4
Exception while inserting a record in health_status.
org.postgresql.util.PSQLException: ERROR: database is not accepting commands to avoid wraparound data loss in database "db"
Hint: Stop the postmaster and vacuum that database in single-user mode.
Как указано в приведенной выше ошибке, я попытался войти в однопользовательский режим и попытался запустить полный вакуум, но вместо этого получил ошибку ниже:
PostgreSQL stand-alone backend 9.4.4
backend> vacuum full;
< 2019-11-06 14:26:25.179 UTC > WARNING: database "db" must be vacuumed within 999999 transactions
< 2019-11-06 14:26:25.179 UTC > HINT: To avoid a database shutdown, execute a database-wide VACUUM in that database.
You might also need to commit or roll back old prepared transactions.
< 2019-11-06 14:26:25.215 UTC > ERROR: missing chunk number 0 for toast value xxxx in pg_toast_1234
< 2019-11-06 14:26:25.215 UTC > STATEMENT: vacuum full;
Я попытался запустить vacuum
, но это привело к другой ошибке, которая указывает на отсутствующие атрибуты для relid xxxxx
backend> vacuum;
< 2019-11-06 14:27:47.556 UTC > ERROR: catalog is missing 3 attribute(s) for relid xxxxx
< 2019-11-06 14:27:47.556 UTC > STATEMENT: vacuum;
Я попытался сделать vacuum freeze
для всей базы данных, но это приводитк ошибке каталога снова после некоторого ожидания.
Кроме того, я попытался запустить vacuum freeze
для одной таблицы, которая работала нормально, но когда я выполняю очистку для всех таблиц, она, вероятно, включает поврежденную какну и заканчивается с той же ошибкой:
backend> vacuum full freeze
< 2019-11-07 08:54:25.958 UTC > WARNING: database "db" must be vacuumed within 999987 transactions
< 2019-11-07 08:54:25.958 UTC > HINT: To avoid a database shutdown, execute a database-wide VACUUM in that database.
You might also need to commit or roll back old prepared transactions.
< 2019-11-07 08:54:26.618 UTC > ERROR: missing chunk number 0 for toast value xxxxx in pg_toast_xxxx
< 2019-11-07 08:54:26.618 UTC > STATEMENT: vacuum full freeze
Есть ли способ выяснить поврежденную таблицу и способ восстановить целостность базы данных, чтобы приложение могло получить доступ к остальной части базы данных?
PS У меня нет резервной копии для восстановления данных, поэтому единственное решение здесь - удаление поврежденных данных или их исправление.