pg_surgery. Операции над потенциально поврежденными данными
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: отсутствуют.
Схема размещения:
ext
.
Предоставляет инструменты для выполнения корректирующих действий над потенциально поврежденными данными.
Функции
Функции предоставляемые расширением:
heap_force_kill(regclass, tid[]) return void
- отмечает «использованные» указатели строк как «мертвые», не проверяя данные строк. Предполагаемое использование этой функции - принудительное удаление строк, которые иначе недоступны.heap_force_freeze(regclass, tid[]) return void
- отмечает строки как замороженные, не проверяя данные строк. Предполагаемое использование этой функции - сделать доступными строки, которые иначе были бы недоступны из-за поврежденной информации о видимости, или которые препятствуют успешной очистке таблицы из-за поврежденной информации о видимости.
Доработка
Доработка не проводилась.
Ограничения
Ограничения отсутствуют.
Установка
Для начала использования расширения необходимо выполнить команду активации расширения:
postgres=# CREATE EXTENSION pg_surgery;
CREATE EXTENSION
Проверьте, что расширение установлено:
postgres=# \dx pg_surgery
List of installed extensions
Name | Version | Schema | Description
------------+---------+--------+----------------------------------------------------
pg_surgery | 1.0 | public | extension to perform surgery on a damaged relation
(1 row)
Настройка
Не требуется.
Использование модуля
Далее приведены примеры использования функций предоставляемых модулем:
-
Пример использования функции
heap_force_kill
:test=> select * from t1 where ctid = '(0, 1)';
ERROR: could not access status of transaction 4007513275
DETAIL: Could not open file "pg_xact/0EED": No such file or directory.
test=# select heap_force_kill('t1'::regclass, ARRAY['(0, 1)']::tid[]);
heap_force_kill
-----------------
(1 row)
test=# select * from t1 where ctid = '(0, 1)';
(0 rows) -
Пример использования функции
heap_force_freeze
:test=> vacuum t1;
ERROR: found xmin 507 from before relfrozenxid 515
CONTEXT: while scanning block 0 of relation "public.t1"
test=# select ctid from t1 where xmin = 507;
ctid
-------
(0,3)
(1 row)
test=# select heap_force_freeze('t1'::regclass, ARRAY['(0, 3)']::tid[]);
heap_force_freeze
-------------------
(1 row)
test=# select ctid from t1 where xmin = 2;
ctid
-------
(0,3)
(1 row)
Ссылки на документацию разработчика
Дополнительно поставляемый модуль pg_surgery.