Documentation PostgreSQL 14.22 » Annexes » Modules supplémentaires fournis » pg_surgery

Précédent | Niveau supérieur | Suivant
F.31. pgstattuple | Sommaire | F.33. pg_trgm

## F.32. pg_surgery

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 base 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.

### F.32.1. Fonctions

`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)

### F.32.2. Auteurs

Ashutosh Sharma `<ashu.coek88@gmail.com>`