В этом разделе подробно описывается формат каждого сообщения логической репликации. Эти сообщения или выдаются через SQL-интерфейс слота репликации или передаются процессом walsender. Когда их передаёт walsender, они помещаются внутрь WAL-сообщений протокола репликации, описанных в Разделе 53.4, и в общем следуют тому же потоку сообщений, что и сообщения физической репликации.
Указывает, что это начальное сообщение.
Окончательный LSN транзакции.
Время фиксации транзакции. Значение задаётся в микросекундах, прошедших с начала эпохи PostgreSQL (2000-01-01).
Идентификатор транзакции.
Указывает, что это сообщение о фиксации.
Флаги; в настоящее время не используются (поле должно содержать 0).
LSN записи фиксации.
Конечный LSN транзакции.
Время фиксации транзакции. Значение задаётся в микросекундах, прошедших с начала эпохи PostgreSQL (2000-01-01).
Указывает, что это сообщение об источнике.
LSN записи фиксации на сервере-источнике.
Имя источника.
Заметьте, что внутри одной транзакции может быть несколько сообщений Origin.
Указывает, что это сообщение об отношении.
Идентификатор отношения.
Пространство имён (пустая строка для pg_catalog
).
Имя отношения.
Свойство идентификации реплики для отношения (то же, что и relreplident
в pg_class
).
Число столбцов.
Затем для каждого столбца идёт следующий блок сообщения:
Флаги столбца. В настоящее время это может быть 0 (флагов нет) или 1 (столбец помечается как часть ключа).
Имя столбца.
Идентификатор типа данных столбца.
Модификатор типа столбца (atttypmod
).
Указывает, что это сообщение о типе.
Идентификатор типа данных.
Пространство имён (пустая строка для pg_catalog
).
Имя типа данных.
Указывает, что это сообщение о добавлении данных.
Идентификатор отношения, соответствующий идентификатору в сообщении об отношении.
Обозначает следующее сообщение TupleData как содержащее новый кортеж.
Блок сообщения TupleData, представляющий содержимое нового кортежа.
Указывает, что это сообщение об изменении данных.
Идентификатор отношения, соответствующий идентификатору в сообщении об отношении.
Указывает, что следующий блок TupleData содержит ключ. Это поле является необязательным и присутствует, только если изменение затронуло столбцы, являющиеся частью индекса REPLICA IDENTITY.
Указывает, что следующий блок TupleData содержит старый кортеж. Это поле является необязательным и присутствует, только если у таблицы, в которой произошло изменение, свойство REPLICA IDENTITY равно FULL.
Блок сообщения TupleData, представляющий содержимое старого кортежа или первичного ключа. Присутствует, только если перед ним идёт признак 'O' или 'K'.
Обозначает следующее сообщение TupleData как содержащее новый кортеж.
Блок сообщения TupleData, представляющий содержимое нового кортежа.
Сообщение Update может содержать либо блок 'K', либо блок 'O', либо ни один из них, но не оба сразу.
Указывает, что это сообщение об удалении данных.
Идентификатор отношения, соответствующий идентификатору в сообщении об отношении.
Указывает, что следующий блок TupleData содержит ключ. Это поле присутствует, если таблица, в которой произошло удаление, использует индекс в качестве REPLICA IDENTITY.
Указывает, что следующий блок TupleData содержит старый кортеж. Это поле присутствует, если у таблицы, в которой произошло удаление, свойство REPLICA IDENTITY равно FULL.
Блок сообщения TupleData, представляющий содержимое старого кортежа или первичного ключа, в зависимости от предыдущего поля.
Сообщение Delete может содержать либо блок 'K', либо блок 'O', но не оба сразу.
Указывает, что это сообщение об усечении отношений.
Число отношений.
Битовые флаги для TRUNCATE
: 1 соответствует указанию CASCADE
, 2 — RESTART IDENTITY
.
Идентификатор отношения, соответствующий идентификатору в сообщении об отношении. Это поле повторятся для каждого отношения.
Описанные выше сообщения имеют следующие общие блоки.
Число столбцов.
Затем для каждого столбца следует один из следующих блоков для каждого столбца:
Обозначает данные как значение NULL.
Или
Обозначает неизменённое значение TOAST (само значение не передаётся).
Или
Обозначает данные как значение в текстовом формате.
Длина значения столбца.
n
Значение столбца в текстовом формате. (В будущих выпусках могут поддерживаться и другие форматы.) Здесь n
— заданная выше длина.