64.1. Registros WAL genéricos #

Aunque todos los módulos integrados que registran en WAL tienen sus propios tipos de registros WAL, también existe un tipo de registro WAL genérico, el cual describe cambios en las páginas de una manera genérica.

Note

Los registros WAL genéricos se ignoran durante la decodificación lógica (Logical Decoding). Si se requiere decodificación lógica para tu extensión, considera un gestor de recursos WAL personalizado (Custom WAL Resource Manager).

La API para construir registros WAL genéricos está definida en access/generic_xlog.h e implementada en access/transam/generic_xlog.c.

Para realizar una actualización de datos registrada en WAL utilizando la facilidad de registro WAL genérico, sigue estos pasos:

  1. state = GenericXLogStart(relation) — inicia la construcción de un registro WAL genérico para la relación dada.

  2. page = GenericXLogRegisterBuffer(state, buffer, flags) — registra un búfer para ser modificado dentro del registro WAL genérico actual. Esta función devuelve un puntero a una copia temporal de la página del búfer, donde se deben realizar las modificaciones. (No modifiques el contenido del búfer directamente). El tercer argumento es una máscara de bits de flags aplicables a la operación. Actualmente, el único flag es GENERIC_XLOG_FULL_IMAGE, que indica que se debe incluir una imagen de página completa en lugar de una actualización delta en el registro WAL. Normalmente, este flag se configuraría si la página es nueva o ha sido reescrita por completo. GenericXLogRegisterBuffer se puede repetir si la acción registrada en WAL necesita modificar múltiples páginas.

  3. Aplica las modificaciones a las imágenes de página obtenidas en el paso anterior.

  4. GenericXLogFinish(state) — aplica los cambios a los búferes y emite el registro WAL genérico.

La construcción del registro WAL se puede cancelar entre cualquiera de los pasos anteriores llamando a GenericXLogAbort(state). Esto descartará todos los cambios en las copias de las imágenes de página.

Ten en cuenta los siguientes puntos al utilizar la facilidad de registro WAL genérico: