60. Enregistrements génériques des journaux de transactions

Bien que tous les modules internes traçant dans les journaux de transactions ont leur propre type d'enregistrements WAL, il existe aussi un type d'enregistrement générique. Ce type d'enregistrement décrit les modifications de pages d'une façon générique. Ceci est utile pour les extensions fournissant des méthodes d'accès personnalisés car elles ne peuvent pas enregistrer leurs propres routines de rejeu des journaux de transactions.

L'API de construction des enregistrements génériques pour les journaux de transactions est définie dans access/generic_xlog.h et implémentée dans access/transam/generic_xlog.c.

Pour réaliser une mise à jour de données tracée dans les journaux de transactions en utilisant le système d'enregistrement générique, suivez ces étapes :

  1. state = GenericXLogStart(relation) -- lance la construction d'un enregistrement générique pour la relation spécifiée.

  2. page = GenericXLogRegisterBuffer(state, buffer, flags) -- enregistre un tampon à modifier dans l'enregistrement générique actuel du journal de transactions. Cette fonction renvoie un pointeur vers une copie temporaire de la page du tampon, où les modifications doivent survenir. (Ne modifiez pas le contenu du tampon.) Le troisième argument est un masque de bits pour les drapeaux applicables à l'opération. Actuellement, le seul drapeau disponible est GENERIC_XLOG_FULL_IMAGE, qui indique qu'une image d'une page complète doit être inclue dans l'enregistrement WAL, plutôt qu'un delta. Typiquement, ce drapeau doit être configurée si le bloc est nouveau ou s'il a été complètement réécrit. GenericXLogRegisterBuffer peut être répété si l'action tracée doit modifier plusieurs blocs.

  3. Réalisez des modifications à l'image des pages obtenue à l'étape précédente.

  4. GenericXLogFinish(state) -- applique les modifications aux tampons et émet l'enregistrement générique.

La construction d'enregistrements de journaux de transactions peut être annulée entre n'importe laquelle des étapes ci-dessus en appelant la fonction GenericXLogAbort(state). Ceci annulera toutes les modifications aux copies d'image de bloc.

Merci de noter les points suivants lors de l'utilisation de la fonctionnalité d'enregistrements génériques pour les journaux de transactions :