powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Восстановление TOAST файла (v12.8)
10 сообщений из 10, страница 1 из 1
Восстановление TOAST файла (v12.8)
    #40127685
prokhorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте !
Помогите, пжл, разобраться с проблемой (Postgresql v12.8).

Ситуация : в какой-то момент стала появляться ошибка (ERROR: could not open file "base/18327/2840": No such file or directory), если посмотреть, что за файл не находится - toast к одной из системных таблиц

Код: plaintext
1.
2.
3.
4.
5.
6.
select t1.oid, t1.relname, t1.relkind, t2.oid, t2.relname, t2.relkind, t2.relpages, t2.reltuples
  from pg_class t1 inner join pg_class t2 on t1.reltoastrelid = t2.oid
  where t1.relkind = 'r' and t2.relkind = 't' and t2.oid = 2840 ;

 oid  |   relname    | relkind | oid  |    relname    | relkind | relpages | reltuples 
------+--------------+---------+------+---------------+---------+----------+-----------
 2619 | pg_statistic | r       | 2840 | pg_toast_2619 | t       |       18 |        28


Можно ли что-то предпринять для исправления ситуации ?
Заранее Огромное Спасибо за любого вида информацию !
...
Рейтинг: 0 / 0
Восстановление TOAST файла (v12.8)
    #40127694
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prokhorov
Здравствуйте !
Помогите, пжл, разобраться с проблемой (Postgresql v12.8).

Ситуация : в какой-то момент стала появляться ошибка (ERROR: could not open file "base/18327/2840": No such file or directory), если посмотреть, что за файл не находится - toast к одной из системных таблиц

Код: plaintext
1.
2.
3.
4.
5.
6.
select t1.oid, t1.relname, t1.relkind, t2.oid, t2.relname, t2.relkind, t2.relpages, t2.reltuples
  from pg_class t1 inner join pg_class t2 on t1.reltoastrelid = t2.oid
  where t1.relkind = 'r' and t2.relkind = 't' and t2.oid = 2840 ;

 oid  |   relname    | relkind | oid  |    relname    | relkind | relpages | reltuples 
------+--------------+---------+------+---------------+---------+----------+-----------
 2619 | pg_statistic | r       | 2840 | pg_toast_2619 | t       |       18 |        28


Можно ли что-то предпринять для исправления ситуации ?
Заранее Огромное Спасибо за любого вида информацию !

Ну pg_statistic не смертельно действительно.
Я бы попробовал бы сначала перезапусть базу с allow_system_table_mods
потом сделать truncate pg_statistic;
потом analyze; по проблемной базы и перезапуск базы с отключенным allow_system_table_mods

ВАЖНО: в нормальной ситуации и обычно - надо просто переключиться на реплику и переналить мастер (мало ли что там ещё там побилось). Или начисто в новом кластере восстановиться из backup. То что я написал выше - пробовать если у вас ни то ни другое недоступно а очень хочется поковыряться.
Обязательно полную копию кластера перед этим сделать (файловую на остановленной базе).

PS: предполагается что всеми основными инструментами recovery вы владеете.
PPS: а как вы вообще этого добились? были какие то сбои перед этим?

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Восстановление TOAST файла (v12.8)
    #40127697
prokhorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Добились - при падении оборудования ... :(
При чём - "пропал" только сам toast файл, vm и fsm для него существуют.
...
Рейтинг: 0 / 0
Восстановление TOAST файла (v12.8)
    #40127711
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk

Я бы попробовал бы сначала перезапусть базу с allow_system_table_mods
потом сделать truncate pg_statistic;

хмхм, не думаю что это хорошая идея, enable-cassert сборка некрасиво ругается на сломанные assert'ы

select relpages from pg_class where relfilenode = 2840;
dd if=/dev/zero bs=8K count=$(relpages) of=$(pgdata/base/...)
delete from pg_statistic;
analyze;

так выглядит поаккуратнее. Но всё равно не надо так
...
Рейтинг: 0 / 0
Восстановление TOAST файла (v12.8)
    #40127712
Guzya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не туда написал.
...
Рейтинг: 0 / 0
Восстановление TOAST файла (v12.8)
    #40127736
prokhorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,
Melkij,
Спасибо Огромное за Ответы !

Maxim Boguk,
Повторил предложенное решение :
1) Перезапуск кластера с allow_system_table_mods='ON' (исправление postgresql.auto.conf)
2) Очистка таблицы pg_statistic (truncate pg_statistic)
3) Обновление статистики БД (analyze)
4) Перезапуск кластера с allow_system_table_mods='OFF' (исправление postgresql.auto.conf)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select t1.oid, t1.relname, t1.relkind, t2.oid, t2.relname, t2.relkind, t2.relpages, t2.reltuples,pg_relation_filepath(t2.oid)
  from pg_class t1 inner join pg_class t2 on t1.reltoastrelid = t2.oid
  where t1.relkind = 'r' and t2.relkind = 't' and t1.relname = 'pg_statistic' ;

oid  |   relname    | relkind | oid  |    relname    | relkind | relpages | reltuples | pg_relation_filepath
 
-----+--------------+---------+------+---------------+---------+----------+-----------+----------------------
2619 | pg_statistic | r       | 2840 | pg_toast_2619 | t       |        0 |         0 | base/18327/1111994


Ошибка вроде пропала, поменялось название TOAST файла и удалены слои (vm,fsm) от "старой" версии.

Как ещё убедиться в корректности решения ?
Не совсем понял про enable-assert - где это может проявиться в дальнейшем ?
...
Рейтинг: 0 / 0
Восстановление TOAST файла (v12.8)
    #40127738
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prokhorov
Не совсем понял про enable-assert - где это может проявиться в дальнейшем ?

А никто не знает. Как и в целом при любых манипуляциях после allow_system_table_mods.
...
Рейтинг: 0 / 0
Восстановление TOAST файла (v12.8)
    #40127817
prokhorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Melkij,

Допустим, кластер с дефектной БД - тестовый, включить на нём опцию allow_system_table_mods, исправить проблему и выгрузить БД с помощью pg_dump - полученный дамп загрузить на боевой кластер ? Может быть тут какая-то "побочка" для боевого кластера ?
...
Рейтинг: 0 / 0
Восстановление TOAST файла (v12.8)
    #40127825
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prokhorov,

pg_dump делает логический снимок данных и разворачивается обычным SQL (даже custom и dir форматы). Поэтому повреждения исходного кластера не переносит.
Это рекомендуемый путь после повреждений внутренностей базы, снять дамп, переинициализировать кластер с initdb и влить данные.
...
Рейтинг: 0 / 0
Восстановление TOAST файла (v12.8)
    #40128326
prokhorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное Спасибо за Ответы !!!

Подитожу, действия проводились на 2х кластерах (условно - TEST и PROD, файл пропал на TEST) :

Код: plaintext
1.
2.
3.
4.
5.
1) TEST = Перезапуск кластера с allow_system_table_mods='ON' (исправление postgresql.auto.conf)
2) TEST = Очистка таблицы pg_statistic (truncate pg_statistic)
3) TEST = Перезапуск кластера с allow_system_table_mods='OFF' (исправление postgresql.auto.conf)
4) TEST = Обновление статистики БД (analyze)
5) TEST = Дампирование БД (pg_dump -F c)
6) PROD = Восстановление БД (pg_restore)

++++++++++++++++++
Действия на TEST при включённой опции allow_system_table_mods лучше ограничить только очисткой таблицы. Предполагаемая причина "пропажи" toast файла к таблице pg_statistic - проблемы с СХД, аварийный останов ОС с СУБД. Несколько дней эксплуатации "исправленной" БД на PROD - ошибок вроде не обнаружено.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Восстановление TOAST файла (v12.8)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]