Aller au contenu

pg_resetwal

Cet outil permet de modifier les identifiants courants d’un cluster de base de données. Il est utile lorsque le serveur ne veut plus démarrer suite à une corruption de fichiers.

Danger

Utiliser cet outil sur une production peut corrompre votre instance et provoquer la perte de vos données. Si vous avez un support auprès de Dalibo, contactez-le.

Utilisation (serveur éteint) :

$ /usr/pgsql-16/bin/pg_resetwal -n /var/lib/pgsql/16/data/
Current pg_control values:

pg_control version number:            1300
Catalog version number:               202307071
Database system identifier:           7413400383278424145
Latest checkpoint's TimeLineID:       1
Latest checkpoint's full_page_writes: on
Latest checkpoint's NextXID:          0:881
Latest checkpoint's NextOID:          16693
Latest checkpoint's NextMultiXactId:  1
Latest checkpoint's NextMultiOffset:  0
Latest checkpoint's oldestXID:        722
Latest checkpoint's oldestXID's DB:   1
Latest checkpoint's oldestActiveXID:  0
Latest checkpoint's oldestMultiXid:   1
Latest checkpoint's oldestMulti's DB: 1
Latest checkpoint's oldestCommitTsXid:0
Latest checkpoint's newestCommitTsXid:0
Maximum data alignment:               8
Database block size:                  8192
Blocks per segment of large relation: 131072
WAL block size:                       8192
Bytes per WAL segment:                16777216
Maximum length of identifiers:        64
Maximum columns in an index:          32
Maximum size of a TOAST chunk:        1996
Size of a large-object chunk:         2048
Date/time type storage:               64-bit integers
Float8 argument passing:              by value
Data page checksum version:           0


Values to be changed:

First log segment after reset:        00000001000000000000000F 

Notez le -n qui empêche la modification effective.

En dernier recours, cet outil peut être utilisé pour réussir à relancer le serveur. Il faut toujours copier à froid l’intégralité du cluster (donc serveur éteint) avant d’utiliser pg_resetwal.

Après avoir testé sans modifier avec pg_resetwal -n, vous pouvez lancer pg_resetwal. Ensuite, il faut obligatoirement procéder à un pg_dump, recréer une instance vierge, et y restaurer les données avec un pg_restore. Seule cette suite d’opérations permet de garantir de retrouver un serveur dans un état totalement stable. Même si l’instance semble fonctionnelle suite à pg_resetwal, rien n’est certain.

Explications :

Lors de son utilisation, pg_resetwal modifie le XID courant, il est donc fort probable que lors de l’utilisation, certains marqueurs soient encore actifs.