Esta sección describe el formato detallado de cada mensaje de replicación lógica. Estos mensajes se devuelven mediante la interfaz SQL de ranura de replicación (replication slot) o son enviados por un walsender. En el caso de un walsender, se encapsulan dentro de los mensajes WAL del protocolo de replicación como se describe en Section 54.4, y generalmente siguen el mismo flujo de mensajes que la replicación física.
Identifica el mensaje como un mensaje de inicio (begin).
El LSN final de la transacción.
Marca de tiempo de confirmación (commit) de la transacción. El valor está expresado en número de microsegundos desde la época de PostgreSQL (2000-01-01).
Xid de la transacción.
Identifica el mensaje como un mensaje de decodificación lógica.
Xid de la transacción (solo presente para transacciones en flujo/streamed). Este campo está disponible desde la versión 2 del protocolo.
Banderas (flags); ya sea 0 para indicar que no hay banderas o 1 si el mensaje de decodificación lógica es transaccional.
El LSN del mensaje de decodificación lógica.
El prefijo del mensaje de decodificación lógica.
Longitud del contenido.
nEl contenido del mensaje de decodificación lógica.
Identifica el mensaje como un mensaje de confirmación (commit).
Banderas (flags); actualmente no se utilizan.
El LSN del commit.
El LSN final de la transacción.
Marca de tiempo de confirmación (commit) de la transacción. El valor está expresado en número de microsegundos desde la época de PostgreSQL (2000-01-01).
Identifica el mensaje como un mensaje de origen.
El LSN del commit en el servidor de origen.
Nombre del origen.
Ten en cuenta que puede haber múltiples mensajes Origin dentro de una sola transacción.
Identifica el mensaje como un mensaje de relación.
Xid de la transacción (solo presente para transacciones en flujo/streamed). Este campo está disponible desde la versión 2 del protocolo.
OID de la relación.
Espacio de nombres (namespace; cadena vacía para pg_catalog).
Nombre de la relación.
Configuración de identidad de réplica para la relación (igual a
relreplident en pg_class).
Número de columnas.
A continuación, aparece la siguiente parte del mensaje para cada columna incluida en la publicación:
Banderas (flags) para la columna. Actualmente puede ser 0 para indicar que no hay banderas o 1 que marca la columna como parte de la clave.
Nombre de la columna.
OID del tipo de datos de la columna.
Modificador de tipo de la columna (atttypmod).
Identifica el mensaje como un mensaje de tipo.
Xid de la transacción (solo presente para transacciones en flujo/streamed). Este campo está disponible desde la versión 2 del protocolo.
OID del tipo de datos.
Espacio de nombres (namespace; cadena vacía para pg_catalog).
Nombre del tipo de datos.
Identifica el mensaje como un mensaje de inserción (insert).
Xid de la transacción (solo presente para transacciones en flujo/streamed). Este campo está disponible desde la versión 2 del protocolo.
OID de la relación correspondiente al ID en el mensaje de relación.
Identifica el siguiente mensaje TupleData como una nueva tupla.
Parte del mensaje TupleData que representa el contenido de la nueva tupla.
Identifica el mensaje como un mensaje de actualización (update).
Xid de la transacción (solo presente para transacciones en flujo/streamed). Este campo está disponible desde la versión 2 del protocolo.
OID de la relación correspondiente al ID en el mensaje de relación.
Identifica el siguiente submensaje TupleData como una clave. Este campo es opcional y solo está presente si la actualización modificó datos en cualquiera de las columnas que forman parte del índice REPLICA IDENTITY.
Identifica el siguiente submensaje TupleData como una tupla antigua. Este campo es opcional y solo está presente si la tabla en la que ocurrió la actualización tiene REPLICA IDENTITY establecido en FULL.
Parte del mensaje TupleData que representa el contenido de la tupla antigua o clave primaria. Solo está presente si la parte anterior 'O' o 'K' está presente.
Identifica el siguiente mensaje TupleData como una nueva tupla.
Parte del mensaje TupleData que representa el contenido de una nueva tupla.
El mensaje Update puede contener una parte de mensaje 'K' o una parte de mensaje 'O' o ninguna de ellas, pero nunca ambas.
Identifica el mensaje como un mensaje de eliminación (delete).
Xid de la transacción (solo presente para transacciones en flujo/streamed). Este campo está disponible desde la versión 2 del protocolo.
OID de la relación correspondiente al ID en el mensaje de relación.
Identifica el siguiente submensaje TupleData como una clave. Este campo está presente si la tabla en la que ocurrió la eliminación utiliza un índice como REPLICA IDENTITY.
Identifica el siguiente mensaje TupleData como una tupla antigua. Este campo está presente si la tabla en la que ocurrió la eliminación tiene REPLICA IDENTITY establecido en FULL.
Parte del mensaje TupleData que representa el contenido de la tupla antigua o clave primaria, dependiendo del campo anterior.
El mensaje Delete puede contener una parte de mensaje 'K' o una parte de mensaje 'O', pero nunca ambas.
Identifica el mensaje como un mensaje de vaciado (truncate).
Xid de la transacción (solo presente para transacciones en flujo/streamed). Este campo está disponible desde la versión 2 del protocolo.
Número de relaciones.
Bits de opción para TRUNCATE:
1 para CASCADE, 2 para RESTART IDENTITY.
OID de la relación correspondiente al ID en el mensaje de relación. Este campo se repite para cada relación.
Los siguientes mensajes (Stream Start, Stream Stop, Stream Commit y Stream Abort) están disponibles desde la versión 2 del protocolo.
Identifica el mensaje como un mensaje de inicio de flujo (stream start).
Xid de la transacción.
Un valor de 1 indica que este es el primer segmento de flujo para este XID, 0 para cualquier otro segmento de flujo.
Identifica el mensaje como un mensaje de parada de flujo (stream stop).
Identifica el mensaje como un mensaje de confirmación de flujo (stream commit).
Xid de la transacción.
Banderas (flags); actualmente no se utilizan.
El LSN de la confirmación (commit).
El LSN final de la transacción.
Marca de tiempo de confirmación de la transacción. El valor está expresado en número de microsegundos desde la época de PostgreSQL (2000-01-01).
Identifica el mensaje como un mensaje de aborto de flujo (stream abort).
Xid de la transacción.
Xid de la subtransacción (será idéntico al xid de la transacción para transacciones de nivel superior).
El LSN de la operación de aborto, presente solo cuando la transmisión está configurada en paralelo. Este campo está disponible desde la versión 4 del protocolo.
Marca de tiempo de aborto de la transacción, presente solo cuando la transmisión está configurada en paralelo. El valor está expresado en número de microsegundos desde la época de PostgreSQL (2000-01-01). Este campo está disponible desde la versión 4 del protocolo.
Los siguientes mensajes (Begin Prepare, Prepare, Commit Prepared, Rollback Prepared y Stream Prepare) están disponibles desde la versión 3 del protocolo.
Identifica el mensaje como el inicio de un mensaje de transacción preparada.
El LSN de la preparación (prepare).
El LSN final de la transacción preparada.
Marca de tiempo de preparación de la transacción. El valor está expresado en número de microsegundos desde la época de PostgreSQL (2000-01-01).
Xid de la transacción.
El GID definido por el usuario de la transacción preparada.
Identifica el mensaje como un mensaje de transacción preparada.
Banderas (flags); actualmente no se utilizan.
El LSN de la preparación (prepare).
El LSN final de la transacción preparada.
Marca de tiempo de preparación de la transacción. El valor está expresado en número de microsegundos desde la época de PostgreSQL (2000-01-01).
Xid de la transacción.
El GID definido por el usuario de la transacción preparada.
Identifica el mensaje como el commit de un mensaje de transacción preparada.
Banderas (flags); actualmente no se utilizan.
El LSN de la confirmación (commit) de la transacción preparada.
El LSN final de la confirmación (commit) de la transacción preparada.
Marca de tiempo de confirmación de la transacción. El valor está expresado en número de microsegundos desde la época de PostgreSQL (2000-01-01).
Xid de la transacción.
El GID definido por el usuario de la transacción preparada.
Identifica el mensaje como la reversión (rollback) de un mensaje de transacción preparada.
Banderas (flags); actualmente no se utilizan.
El LSN final de la transacción preparada.
El LSN final de la reversión (rollback) de la transacción preparada.
Marca de tiempo de preparación de la transacción. El valor está expresado en número de microsegundos desde la época de PostgreSQL (2000-01-01).
Marca de tiempo de reversión (rollback) de la transacción. El valor está expresado en número de microsegundos desde la época de PostgreSQL (2000-01-01).
Xid de la transacción.
El GID definido por el usuario de la transacción preparada.
Identifica el mensaje como un mensaje de transacción preparada de flujo (stream prepared).
Banderas (flags); actualmente no se utilizan.
El LSN de la preparación (prepare).
El LSN final de la transacción preparada.
Marca de tiempo de preparación de la transacción. El valor está expresado en número de microsegundos desde la época de PostgreSQL (2000-01-01).
Xid de la transacción.
El GID definido por el usuario de la transacción preparada.
Las siguientes partes de mensaje son compartidas por los mensajes anteriores.
Número de columnas.
A continuación, aparece uno de los siguientes submensajes para cada columna publicada:
Identifica los datos como valor NULL.
O
Identifica un valor TOAST sin cambios (el valor real no se envía).
O
Identifica los datos como valor formateado en texto.
O
Identifica los datos como valor formateado en binario.
Longitud del valor de la columna.
n
El valor de la columna, ya sea en formato binario o de texto.
(Como se especifica en el byte de formato anterior).
n es la longitud anterior.