G.3. pgpro_logical_slot — управление слотами логической репликации #
G.3.1. Обзор #
pgpro_logical_slot — это расширение Postgres Pro Enterprise для управления слотами логической репликации. С помощью расширения можно создать слот в прошлом для указанного LSN. Это применимо, когда нужно восстановить утерянный слот логической репликации.
У расширения pgpro_logical_slot есть следующие ограничения:
Стандартные ограничения создания слота логической репликации, т.е. для параметра wal_level должно быть задано значение
logicalс моментаrestart_lsn.Сегменты WAL с момента
restart_lsnдо текущего LSN должны присутствовать на физическом узле.Во временном интервале между
restart_lsnи созданием слота логической репликации структура реплицируемой таблицы должна оставаться неизменной.При создании слота логической репликации pgpro_logical_slot ищет точку согласованности — подходящий начальный LSN, откуда можно безопасно начать логическое декодирование. Чтобы её найти, необходимо, чтобы на узле в интервале между
restart_lsnи созданием слота логической репликации имелись контрольные точки. После создания слота необходимо убедиться, что текущий начальный LSN, возвращённый функцией pgpro_logical_slot.pgpro_create_logical_replication_slot, соответствует вашим требованиям.
G.3.2. Установка #
Расширение pgpro_logical_slot поставляется вместе с Postgres Pro Enterprise в виде отдельного пакета pgpro-logical-slot-ent-18. За подробной инструкцией по установке обратитесь к Главе 17. После установки Postgres Pro Enterprise создайте расширение pgpro_logical_slot:
CREATE EXTENSION pgpro_logical_slot;
G.3.3. Функции #
pgpro_logical_slot.pgpro_create_logical_replication_slot (#имя_слотаname,имя_модуляname,temporaryboolean,twophaseboolean,restart_lsnpg_lsn) returns record (имя_слотаname,lsnpg_lsn)Создаёт слот логической репликации с
restart_lsnв прошлом. Функция принимает следующие параметры:имя_слота: имя создаваемого слота логической репликации.имя_модуля: имя модуля вывода.temporary: необязательный параметр, который определяет, будет ли слот постоянно храниться на диске. Если задано значениеtrue, слот не хранится на диске и используется только в текущем сеансе. Временные слоты также освобождаются при любой ошибке.twophase: необязательный параметр, который определяет, включить ли декодирование подготовленных транзакций для этого слота. Если задано значениеtrue, декодирование включено.restart_lsn: значениеrestart_lsnпоследнего известного работающего состояния слота логической репликации или, если слот создаётся впервые, требуемого состояния слота физической репликации.
Функция возвращает запись, содержащую имя слота и значение начального LSN, который отличается от
restart_lsnи с которого начинается логическая репликация. Все транзакции, зафиксированные после этого LSN, будут реплицированы.Например:
postgres=# SELECT pgpro_logical_slot.pgpro_create_logical_replication_slot('s2', 'test_decoding', false, false, '0/17C8520'::pg_lsn); pgpro_create_logical_replication_slot --------------------------------------- (s2,0/17C8568) (1 row)Функция
pgpro_logical_slot.pgpro_create_logical_replication_slotне проверяет наличие исторических кортежей или необходимых файлов WAL. После создания слота можно выполнить функциюpg_logical_slot_peek_changes, чтобы убедиться, что слот может быть использован для декодирования с LSN в прошлом. Например:postgres=# SELECT count(*) from pg_logical_slot_peek_changes('s2', null, null); count -------- 160055 (1 row)
G.3. pgpro_logical_slot — manage logical replication slots #
G.3.1. Overview #
pgpro_logical_slot is a Postgres Pro Enterprise extension to manage logical replication slots. Using the extension, you can create a slot in the past for a specified LSN. It is helpful, when you need to restore a lost logical replication slot.
The pgpro_logical_slot extension has the following limitations:
Standard limitations for the logical replication slot creation, i.e., the wal_level value must be
logicalstarting fromrestart_lsn.WAL segments from
restart_lsnto the current LSN must be present on a physical node.In a time interval between
restart_lsnand a logical replication slot creation, the structure of the replicated table must remain unchanged.When creating a logical replication slot, pgpro_logical_slot searches for a consistency point — a valid starting LSN from which logical decoding can safely begin. To find it, it is required to have checkpoints on the node in a time interval between
restart_lsnand the logical replication slot creation. When the slot is created, you must verify that the actual starting LSN returned by the pgpro_logical_slot.pgpro_create_logical_replication_slot function meets your requirements.
G.3.2. Installation #
The pgpro_logical_slot extension is provided with Postgres Pro Enterprise as a separate pre-built package pgpro-logical-slot-ent-18. For the detailed installation instructions, refer to Chapter 17. Once you have Postgres Pro Enterprise installed, create the pgpro_logical_slot extension:
CREATE EXTENSION pgpro_logical_slot;
G.3.3. Functions #
pgpro_logical_slot.pgpro_create_logical_replication_slot (#slot_namename,plugin_namename,temporaryboolean,twophaseboolean,restart_lsnpg_lsn) returns record (slot_namename,lsnpg_lsn)Creates a logical replication slot with
restart_lsnin the past. The function takes the following parameters:slot_name: The name of the logical replication slot being created.plugin_name: The output plugin name.temporary: An optional parameter that determines whether the slot should be permanently stored on disk. When set totrue, the slot is not stored on disk and is only meant for use by the current session. Temporary slots are also released upon any error.twophase: An optional parameter that determines whether to enable the decoding of prepared transactions for this slot. When set totrue, the decoding is enabled.restart_lsn: Therestart_lsnvalue of the last known operational state of a logical replication slot, or, if the slot is created for the first time, of the required state of a physical replication slot.
The function returns a record containing the slot name and the starting LSN value, which is different from
restart_lsnand where logical replication is started. All transactions committed after this LSN are replicated.For example:
postgres=# SELECT pgpro_logical_slot.pgpro_create_logical_replication_slot('s2', 'test_decoding', false, false, '0/17C8520'::pg_lsn); pgpro_create_logical_replication_slot --------------------------------------- (s2,0/17C8568) (1 row)The
pgpro_logical_slot.pgpro_create_logical_replication_slotfunction does not check for presence of historical tuples and the required WAL files. After creating a slot, you can optionally execute thepg_logical_slot_peek_changesfunction to ensure your slot can be used for decoding from LSN in the past. For example:postgres=# SELECT count(*) from pg_logical_slot_peek_changes('s2', null, null); count -------- 160055 (1 row)