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.