F.44. pg_surgery — выполнять низкоуровневые операции с данными отношений#

F.44. pg_surgery — выполнять низкоуровневые операции с данными отношений

F.44. pg_surgery — выполнять низкоуровневые операции с данными отношений #

Модуль pg_surgery предоставляет различные функции для выполнения операций на поврежденном отношении. Эти функции небезопасны по своей природе, и их использование может повредить (или даже дополнительно повредить) вашу базу данных. Например, эти функции могут легко использоваться для создания несогласованности таблицы с ее собственными индексами, вызывать нарушения ограничений UNIQUE или FOREIGN KEY, или даже делать кортежи видимыми, которые, при чтении, могут вызвать сбой сервера базы данных. Они должны использоваться с большой осторожностью и только в крайнем случае.

F.44.1. Функции #

heap_force_kill(regclass, tid[]) returns void

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(regclass, tid[]) returns void

heap_force_freeze помечает кортежи как замороженные, не проверяя данные кортежа. Предполагается, что эта функция используется для доступа к кортежам, которые недоступны из-за поврежденной информации о видимости или которые мешают успешному выполнению операции VACUUM из-за поврежденной информации о видимости. Например:

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)

F.44.2. Авторы #

Ashutosh Sharma