Postgres не принимает команды и не удалось выполнить Vacuum из-за ошибки отсутствия номера чанка - PullRequest
0 голосов
/ 07 ноября 2019

Версия: 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 У меня нет резервной копии для восстановления данных, поэтому единственное решение здесь - удаление поврежденных данных или их исправление.

...