Перейти к основному содержимому

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)

Настройка

Не требуется.

Использование модуля

Далее приведены примеры использования функций предоставляемых модулем:

  1. Пример использования функции 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)
  2. Пример использования функции 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.