LOXODATA

pg_wal

2017-10-23   441 mots, 3 minutes de lecture

L’une des nouveautés de la version 10 de PostgreSQL est le changement de nom du répertoire des WAL.
Ce changement majeur implique une rupture de compatibilité avec d’anciens outils ou d’anciennes versions d’outils.

Pourquoi ce changement ?

Vous avez peut-être déjà entendu cette anecdote, réelle et plus fréquente qu’on ne le souhaiterait :

Un client contacte un expert PostgreSQL, car une de ses instance ne fonctionne plus.
En cherchant la cause, le client rapporte que l’espace disque était plein et qu’il a « supprimé des logs pour faire de la place. »
« Lesquels ? »
« Ceux dans le répertoire xlog ».

Si vous ne comprenez pas l’anecdote, lisez attentivement la suite.

Journaux de transaction

Les WAL (Write-Ahead Logs) sont les journaux de transactions de l’instance PostgreSQL.

Avant l’écriture sur disque, et pour offrir une garantie sur les données (par exemple en cas d’arrêt brutal de la machine), PostgreSQL écrit un descriptif des modifications qui seront faites dans un fichier appelé journal. Les écritures réelles dans les fichiers de données sont bien entendu réalisées, mais plus tard.

Jusqu’à la version 9.6, PostgreSQL stockait ces WAL dans un répertoire nommé pg_xlog.

Le X signifie transactions, le nom est alors logs (journaux) de transactions.
Le problème, c’est que ce nom est bien trop proche de log, qu’on retrouve dans la plupart des applications. Les logs sont les journaux applicatifs, dans lesquels on retrouve différents messages, par exemple les erreurs.

Changements avec PostgreSQL 10

Pour éviter qu’une personne ne connaissant pas assez PostgreSQL supprime des journaux de transactions indispensables à la cohérence des données, les développeurs ont fait le choix de changer le nom du répertoire de stockage, et de l’appeler pg_wal.

De manière liée, et dans un but de cohérence et d’harmonisation, les noms de toutes les fonctions, colonnes, tables et outils (ceux fournis en standard) qui utilisaient encore xlog ont été renommés pour utiliser à la place wal. Ce changement a donc un impact assez large et certains scripts risquent de ne plus fonctionner s’ils ne sont pas ajustés pour PostgreSQL 10.

Une nouvelle fonction fait également son apparition : pg_ls_waldir() permet désormais de lister les fichiers WAL, quel que soit leur emplacement.

En complément de ces changements sur les WAL, un autre répertoire a changé, et pg_clog devient désormais pg_xact.

Enfin, le répertoire par défaut des journaux applicatifs qui s’appelait pg_log s’appelle désormais plus simplement log.

Limites

Avec ces modifications, les risques de confusion, et d’erreur, pouvant entraîner des dommages irréversibles sont désormais un peu plus limités. L’utilisation du terme « log » est désormais beaucoup plus restreinte, et plus claire.

Attention toutefois à ne pas rechercher tout répertoire contenant cette chaîne, le répertoire « pg_logical » pouvant alors ressortir dans la liste.