Sobes.tech
Middle+

Que se passe-t-il avec Xmin et Xmax lors d'une mise à jour?

sobes.tech IA

Réponse de l'IA

Dans PostgreSQL, lors de l'exécution d'une opération UPDATE, il ne s'agit pas simplement de modifier une ligne, mais en réalité de créer une nouvelle version de la ligne (MVCC — contrôle de concurrence multiversionnée).

  • Xmin est l'identifiant de la transaction qui a créé (inséré) la version actuelle de la ligne.
  • Xmax est l'identifiant de la transaction qui a marqué la ligne comme supprimée (par exemple, lors d'un UPDATE ou DELETE).

Lors d'un UPDATE :

  1. La vieille version de la ligne reçoit dans le champ Xmax l'identifiant de la transaction en cours qui effectue l'UPDATE — cela signifie que cette version est maintenant considérée comme supprimée pour les nouvelles transactions.
  2. Une nouvelle version de la ligne est créée avec un nouveau Xmin — l'identifiant de la transaction en cours, et un Xmax vide.

Ainsi, un UPDATE est essentiellement un DELETE de l'ancienne version + un INSERT de la nouvelle version, ce qui permet d'assurer l'isolation des transactions et la cohérence des données.