El módulo pg_surgery proporciona varias funciones para
realizar cirugía en una relación dañada. Estas funciones son inseguras por diseño
y su uso puede corromper (o corromper aún más) tu base de datos. Por ejemplo,
estas funciones se pueden utilizar fácilmente para hacer que una tabla sea inconsistente con sus
propios índices, para causar violaciones de restricciones UNIQUE o
FOREIGN KEY, o incluso para hacer visibles tuplas que, al ser leídas,
provocarán la caída del servidor de la base de datos.
Deben utilizarse con gran precaución y solo como último recurso.
heap_force_kill(regclass, tid[]) returns void
heap_force_kill marca punteros de línea “usados”
como “muertos” sin examinar las tuplas. El uso previsto de esta
función es eliminar por la fuerza tuplas que de otro modo no son accesibles.
Por ejemplo:
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 marca tuplas como congeladas sin
examinar los datos de la tupla. El uso previsto de esta función es
hacer accesibles tuplas que son inaccesibles debido a información de
visibilidad corrompida, o que evitan que la tabla sea vaciada (vacuumed) con éxito
debido a información de visibilidad corrompida.
Por ejemplo:
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)
Ashutosh Sharma <[email protected]>