Le module pg_surgery
fournit différentes fonctions pour
réaliser des opérations sur une relation endommagée. Ces fonctions sont
dangereuses de par leur concept et les utiliser pourrait corrompre
(ou corrompre encore plus) votre bases de données. Par exemple, ces
fonctions peuvent facilement être utilisées pour rendre une table
incohérente avec ses propres index, causant des violations de contraintes
UNIQUE
ou FOREIGN KEY
, voire même de
rendre des lignes visibles qui, lorsqu'elles sont lues, vont causer un
crash du serveur de bases de données. Vous devez faire très attention en
les utilisant. Leur utilisation doit rester pour les cas désespérés.
heap_force_kill(regclass, tid[]) returns void
heap_force_kill
marque les pointeurs de lignes
« utilisées » comme « mortes » sans examiner les
lignes. Le but de cette fonction est de forcer la suppression de lignes
autrement inaccessibles. Par exemple :
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
marque les lignes comme gelées
sans examiner les données des lignes. Le but de cette fonction est de
rendre accessibles des lignes qui étaient auparavant inaccessibles à
cause de la corruption des informations de visibilité, ou qui
empêchaient la réussite d'un vacuum sur la table à cause de corruption
sur les informations de visibilité. Par exemple :
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 <ashu.coek88@gmail.com>